Comment les variables à l'intérieur des accolades sont évaluées

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 :