Guide avancé d'écriture des scripts Bash: | ||
---|---|---|
Précédent | Chapitre 4. Introduction aux variables et aux paramètres | Suivant |
Le nom d'une variable est un paramètre fictif pour sa valeur, les données qu'elle contient. L'action de référencer sa valeur est appelée substitution de variable.
Commençons par distinguer soigneusement le nom d'une variable et sa valeur. Si variable1 est le nom d'une variable, alors $variable1 est une référence à sa valeur, l'élément de donnée qu'elle contient. Les seules fois où une variable apparaît << nue >>, sans le symbôle $ 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 Exemple 30-5). Les affectations s'effectuent avec un = (comme dans var1=27), dans une déclaration read, ou en début de boucle (for var2 in 1 2 3).
Entourer une valeur référencée d'apostrophes doubles (" ") n'interfère pas avec la substitution de variable. On appelle cette action la << protection faible >>. Utiliser une apostrophe simple (' ') provoque une utilisation littérale du nom de la variable, et aucune substitution n'est effectuée. C'est ce que l'on appelle la << protection forte >>. Voir Chapitre 5 pour une discussion détaillée.
Notez que $variable est en fait une forme simplifiée de ${variable}. Dans les contextes où la syntaxe $variable provoque une erreur, la forme complète peut marcher (voir Section 9.3, plus bas).
Exemple 4-1. Affectation de variable et substitution
#!/bin/bash # Variables: affectation et substitution a=375 bonjour=$a #------------------------------------------------------------------------- # Aucun espace de chaque côté du signe = n'est permis lorsque qu'on initialise des variables. # Si "VARIABLE =valeur", #+ le script tente de lancer la commande "VARIABLE" avec en argument "=valeur". # Si "VARIABLE= valeur", #+ le script tente de lancer la commande "valeur" avec #+ la variable d'environnement "VARIABLE" déclarée à "". #------------------------------------------------------------------------- echo bonjour # Pas une référence à une variable, juste la chaine "bonjour" echo $bonjour echo ${bonjour} # Identique à ce qui précède echo "$bonjour" echo "${bonjour}" echo bonjour="A B C D" echo $bonjour # A B C D echo "$bonjour" # A B C D # Comme on peut le voir echo $bonjour et echo "$bonjour" donnent des résultats différents # Protéger une variable préserve les espaces. echo echo '$bonjour' # $bonjour # Désactive le réferencement de variables à l'aide d'apostrophes simples #+ ce qui provoque l'interprétation littérale du "$". # Noter l'effet des différents types de protection. bonjour= # L'affecte d'une valeur nulle echo "\$bonjour (null value) = $bonjour" # Noter qu'affecter une valeur nulle à une variable n'est pas la même chose #+ que de la "détruire" bien que le résultat final soit le même (voir plus bas). # -------------------------------------------------------------- # Il est tout à fait possible d'affecter plusieurs variables sur une même ligne, #+ si elles sont séparées par des espaces. # Attention cela peut rendre le script difficile à lire et peut ne pas être portable. var1=variable1 var2=variable2 var3=variable3 echo echo "var1=$var1 var2=$var2 var3=$var3" # Peut causer des problèmes avec de vieilles versions de "sh". # -------------------------------------------------------------- echo; echo nombres="un deux trois" autres_nomnres="1 2 3" # En cas d'espaces à l'intérieur d'une variable, une protection est nécessaire. echo "nombres = $nombres" echo "autres_nombres = $autres_nombres" # autres_nombres = 1 2 3 echo echo "variable_non_initialisee = $variable_non_initialisee" # Une variable non initialisée a une valeur vide (pas de valeur du tout). variable_non_initialisee= # Declaration sans initialisation #+ (même chose que de lui assigner une valeur vide comme au-dessus) echo "variable_non_initialisee = $variable_non_initialisee" # Elle a encore une valeur nulle. uninitialized_variable=23 # On lui affecte une valeur. unset variable_non_initialisee # On la desafffecte. echo "variable_non_initialisee = $variable_non_initialisee" # Elle a encore une valeur nulle echo exit 0 |
![]() | Une variable non initialisée a une valeur << nulle >> - pas de valeur assignée du tout (pas zéro!). Utiliser une variable avant de lui avoir assigné une valeur est généralement cause de problèmes. Il est néanmoins possible de réaliser des opérations arithmétiques sur une variable non initialisée.
|
Précédent | Sommaire | Suivant |
Introduction aux variables et aux paramètres | Niveau supérieur | Affectation de variable |