4. Introduction aux variables et aux paramètres

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.

4.1. Substitution de variable

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, ou dans le cas particulier d'une variable désignant un signal (voir l'Exemple 29.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 9.3, « Substitution de paramètres », ci-dessous).

Exemple 4.1. Affectation de variable et substitution

&ex9;

[Attention]

Attention

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
#+ elle se comporte comme si elle contenait 0 dans une opération arithmétique.
#  C'est un comportement non documenté (et probablement non portable)
#+ qui ne devrait pas être utilisé dans un script.

Voir aussi Exemple 14.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.