4.3. Les variables Bash ne sont pas typées

À l'inverse de nombreux langages de programmation, Bash ne regroupe pas ses variable par « type ». Essentiellement, les variables bash sont des chaînes de caractères mais, suivant le contexte, Bash autorise des opérations entières et des comparaisons sur ces variables, le facteur décisif étant la seule présence de chiffres dans la variable.

Exemple 4.4. Entier ou chaîne?

#!/bin/bash
# int-or-string.sh : Entier ou chaîne de caractères ?

a=2334                   # Entier.
let "a += 1"
echo "a = $a "           # a = 2335
echo                     # Entier, toujours.


b=${a/23/BB}             # Substitue "BB" à "23".
                         # Ceci transforme $b en une chaîne de caractères.
echo "b = $b"            # b = BB35
declare -i b             # Le déclarer comme entier n'aide pas.
echo "b = $b"            # b = BB35

let "b += 1"             # BB35 + 1 =
echo "b = $b"            # b = 1
echo

c=BB34
echo "c = $c"            # c = BB34
d=${c/BB/23}             # Substitue "23" à "BB".
                         # Ceci fait de $d un entier.
echo "d = $d"            # d = 2334
let "d += 1"             # 2334 + 1 =
echo "d = $d"            # d = 2335
echo

# Et à propos des variables nulles ?
e=""
echo "e = $e"            # e =
let "e += 1"             # Les opérations arithmétiques sont-elles permises sur
                         # une variable nulle ?
echo "e = $e"            # e = 1
echo                     # Variable nulle transformée en entier.

# Et concernant les variables non déclarées ?
echo "f = $f"            # f =
let "f += 1"             # Opérations arithmétiques permises ?
echo "f = $f"            # f = 1
echo                     # Variable non déclarée transformée en entier.



# Les variables dans Bash sont essentiellement non typées.

exit 0

Les variables non typées ont des bons et des mauvais côtés. Elles permettent plus de flexibilité dans l'écriture des scripts (assez de corde pour se pendre soi même !) et rendent plus aisé le ciselage des lignes de code. Néanmoins, elles permettent aux erreurs de s'infiltrer dans les programmes et encouragent des habitudes de code bâclé.

Il incombe au programmeur de garder une trace du type des variables du script. Bash ne le fera pas à votre place.