Variables shell
Les variables sont particulièrement utiles pour faciliter l’usage quotidien du shell ; on s’en sert pour modulariser nos commandes et stocker des résultats à exploiter ultérieurement. Il n’est pas nécessaire de procéder à une déclaration en amont de leur usage, et ces derières ne sont pas typées. En outre, il nous est possible d’instancer des variables comme la donnée d’entier, de chaînes de caractères, de tableaux.1
Syntaxe :
FOO=50 # FOO <- 50
FOO="foo bar" # FOO <- la chaîne de caractère "foo bar"
FOO=( # FOO <- un tableau de valeurs
value_1
value_2
)Néanmoins, de telles pratiques ne constituent pas un usage abouti. Tout l’intérêt des variables shells, qu’on écrive un long script ou-bien une commande multi-ligne, consiste en le chaînage de variable et la substition de commandes.
Chaînage de variables
Imaginons qu’on veille conditionner un chemin (path), pour laisser à l’utilisateur la possibilité de surchager la
la cible, notamment par le biais de la variable FOO :
FOO=value_1 # À supposer que FOO soit surchargée par une saisie utilisateur lors de l'exécution du script
BAR=/some/content/$FOO # La valeur de BAR est conditionnée à celle de FOOExpansion de variables
Si le mot-clé
$permet de référencer une variable, l’utiliser comme précédemment risque de compromettre la cohérence de l’injection de la valeur.
À l’exécution, pour permettre l’interprétation des variables, toute référence incluse en leur sein est résolue.
Ainsi, BAR=/some/content/$FOO devient BAR=/some/content/value_1. Nonobstant, c’est omettre deux subtilités :
-
FOOcontient des espaces :FOO="my value" BAR=/some/content/$FOO ls $BARÀ l’exécution
BAR <- /some/content/my value, etls $BARdevientls /some/content/my value. L’interpréteur cherche le fichier/some/content/myetvalueprend le large ; au risque de faire crasher la commande si cette dernière n’attend, contextuellement, qu’un seul argument. En outre, on intuite les effets de bords possible, surtout si un script dérive sans être échouer au run time.Bonne pratique : on encapsule les chaînes de caractères incluant des variables par des guillements afin de préserver l’intégrité structurelle de la chaîne après expansion des variables.
Le script devient :
FOO="my value" BAR="/some/content/$FOO" ls "$BAR" -
$FOOest accolée à d’autres caractères :