Les variables sont la façon dont tout langage de programmation ou de script représente les données. Une variable n'est rien de plus qu'un label, un nom affecté à un emplacement ou à un ensemble d'emplacements dans la mémoire de l'ordinateur contenant un élément de données.
Les variables apparaissent dans les opérations arithmétiques et dans les manipulations de quantité et dans l'analyse des chaînes.
Le nom d'une variable est un point de repère pour sa valeur, la donnée qu'elle contient. L'action de référencer (aller chercher) sa valeur est appelée substitution de variable.
Commençons par distinguer soigneusement le nom d'une variable de sa valeur. Si variable1 est le nom d'une variable, alors $variable1 est une référence à sa valeur, la donnée qu'elle contient. [22]
bash$ variable1=23 bash$ echo variable1 variable bash$ echo $variable1 23
Les seules fois où une variable apparaît « nue », sans le symbole $ en préfixe, est lorsqu'elle est déclarée ou assignée, lorsqu'elle est détruite, lorsqu'elle est exportée, dans une expression arithmétique entre doubles parenthèses (( ... )), ou dans le cas particulier d'une variable désignant un signal (voir l'Exemple 32.5, « Récupérer la sortie »). Les affectations s'effectuent avec un = (comme dans var1=27), ou dans une déclaration read ou en début de boucle (for var2 in 1 2 3).
Entourer une valeur référencée de guillemets (" ... ") n'interfère pas avec la substitution de variable. On appelle cette action les guillemets partiels et quelque fois la protection faible. Utiliser une apostrophe (' ... ') provoque une utilisation littérale du nom de la variable, de sorte qu'aucune substitution n'est effectuée. C'est ce qu'on appelle des guillemets complets ou 'protection forte'. Pour une explication plus approfondie, voyez la section Chapitre 5, Guillemets et apostrophes.
Notez que $variable est en fait une écriture simplifiée de ${variable}. Dans les cas où la syntaxe $variable provoque une erreur, la forme complète peut parfois fonctionner (voir la section Section 10.2, « Substitution de paramètres », ci-dessous).
Une variable non initialisée a une valeur « vide (en anglais 'NULL') » - pas de valeur assignée du tout (pas zéro !).
if [ -z "$non_initialisee" ] then echo "\$non_initialisee est NULL." fi # $non_initialisee est NULL.
L'utilisation d'une variable avant de lui avoir assigné une valeur peut entraîner des ennuis. Il est néanmoins possible de réaliser des opérations arithmétiques sur une variable non initialisée.
echo "$non_initialisee" # (ligne vide) let "non_initialisee += 5" # lui ajoute 5. echo "$non_initialisee" # 5 # Conclusion: # Une variable non initialisée n'a pas de valeur, néanmoins #+ dans une opération arithmétique elle vaut 0.
Voir aussi Exemple 15.23, « Un script (inutile) qui se charge lui-même ».
[22]
Techniquement, le nom d'une variable est appelé une lvalue (left value), signifiant qu'il apparaît sur le côté gauche d'une instruction d'affectation, comme dans VARIABLE=23. La valeur d'une variable est une rvalue (right value), signifiant qu'elle apparaît à la droite d'une instruction d'affectation, comme dans VAR2=$VARIABLE.
Un nom de variable est, en fait, une référence, un pointeur vers des emplacements mémoire où les données réelles associées à cette variable sont conservées.