J'ai regardé quelques scripts que d'autres personnes ont écrits (en particulier Red Hat), et beaucoup de leurs variables sont assignées en utilisant la notation suivanteVARIABLE1="${VARIABLE1:-some_val}"
ou certains développent d'autres variablesVARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"
Quel est l'intérêt d'utiliser cette notation au lieu de simplement déclarer les valeurs directement (par exemple, VARIABLE1=some_val
) ?
Y a-t-il des avantages à cette notation ou d'éventuelles erreurs qui seraient évitées ?
Est-ce que le :-
ont une signification particulière dans ce contexte ?
Réponse acceptée :
Cette technique permet d'attribuer une valeur à une variable si une autre variable est vide ou indéfinie. REMARQUE : Cette "autre variable" peut être la même ou une autre variable.
extrait
${parameter:-word}
If parameter is unset or null, the expansion of word is substituted.
Otherwise, the value of parameter is substituted.
REMARQUE : Ce formulaire fonctionne également, ${parameter-word}
. Si vous souhaitez voir une liste complète de toutes les formes d'extension de paramètres disponibles dans Bash, je vous suggère fortement de jeter un œil à ce sujet dans le wiki de Bash Hacker intitulé :"Parameter expansion".
Exemples
la variable n'existe pas
$ echo "$VAR1"
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
default value
la variable existe
$ VAR1="has value"
$ echo "$VAR1"
has value
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
has value
La même chose peut être faite en évaluant d'autres variables ou en exécutant des commandes dans la partie valeur par défaut de la notation.
$ VAR2="has another value"
$ echo "$VAR2"
has another value
$ echo "$VAR1"
$
$ VAR1="${VAR1:-$VAR2}"
$ echo "$VAR1"
has another value
Plus d'exemples
Vous pouvez également utiliser une notation légèrement différente où il s'agit simplement de VARX=${VARX-<def. value>}
.
$ echo "${VAR1-0}"
has another value
$ echo "${VAR2-0}"
has another value
$ echo "${VAR3-0}"
0
Dans le $VAR1
ci-dessus &$VAR2
étaient déjà définis avec la chaîne "a une autre valeur" mais $VAR3
était indéfini, donc la valeur par défaut a été utilisée à la place, .
Un autre exemple
$ VARX="${VAR3-0}"
$ echo "$VARX"
0
Vérification et attribution à l'aide de :=
note
Enfin, je mentionnerai l'opérateur pratique, :=
. Cela effectuera une vérification et attribuera une valeur si la variable testée est vide ou indéfinie.
Exemple
Notez que $VAR1
est maintenant défini. L'opérateur :=
fait le test et le devoir en une seule opération.
$ unset VAR1
$ echo "$VAR1"
$ echo "${VAR1:=default}"
default
$ echo "$VAR1"
default
Cependant, si la valeur est définie avant, elle est laissée telle quelle.
$ VAR1="some value"
$ echo "${VAR1:=default}"
some value
$ echo "$VAR1"
some value
Tableau de référence pratique Dandy
En relation :Construire une commande en mettant une chaîne dans un tty ?
Références
- Extensions de paramètres – Bash Hackers Wiki
- 10.2. Substitution de paramètres
- Extensions des paramètres bash