Je suis nouveau à shell scripts et je suis tombé sur ces expressions
${var:-val}
et ${var-val}
${var:+val}
et ${var+val}
${var:=val}
et ${var=val}
alors comment sont-ils évalués et quelles sont les différences entre eux
Note: si la question du titre est trompeuse, corrigez-la s'il vous plait … ne savez pas ce que ces expressions sont appelées à être plus spécifiques …
Ce sont toutes les différentes forms d'expansion des parameters avec des alternatives:
${var:-val}
est remplacé par val
si var
est unset ou null, ${var}
sinon (donc val
est une "valeur par défaut"); ${var:=val}
atsortingbue d'abord val
à var
si var
est unset ou null, puis (dans tous les cas) est remplacé par ${var}
; ${var:+val}
est remplacé par nothing si var
est unset ou null, sinon sinon. Omettre le :
supprime la partie "ou null" de toutes ces définitions.
Tout ceci est décrit dans la page de manuel bash(1)
.
Quelques exemples pourraient aider:
unset a echo "${a:-default}"
produit default
, tout comme l' echo "${a-default}"
.
a= echo "${a:-default}"
produit à nouveau des valeurs default
, mais l' echo "${a-default}"
produit une ligne vide.
a=test echo "${a:-default}"
produit un test
, tout comme l' echo "${a-default}"
.
unset a echo "${a:=default}"
produit default
, et a
est maintenant default
(comme confirmé par echo "${a}"
).
Le formulaire +
peut sembler étrange, mais il est utile lors de la construction de variables en plusieurs étapes:
PATH="${PATH}${PATH:+:}/blah/bin"
appenda :
before /blah/bin
uniquement si PATH
n'est pas vide, ce qui évite d'avoir un path commençant par :