À 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 à des erreurs subtiles de s'infiltrer dans les programmes et encouragent des habitudes de code bâclé.
Pour alléger la dure tâche du développeur qui doit garder trace des types de variables dans un script, Bash permet la déclaration de variables.