/ / Que signifie “$ {! Var}” dans un script shell? [dupliquer] - bash, shell, expansion variable

Que signifie "$ {! Var}" dans un script shell? [dupliquer] - bash, shell, expansion variable

J'ai un bloc de code avec la condition ci-dessous, pas sûr de ce qu'il fait exactement.

$var = "${args}_Some_Text"
if [ "${!var}"  == "" ];then
echo "$var is not defined !!!"
fi

Réponses:

9 pour la réponse № 1

C'est ce qu'on appelle l'expansion indirecte variable.

$ hello="this is some text"   # we set $hello
$ var="hello"                 # $var is "hello"
$ echo "${!var}"              # we print the variable linked by $var"s content
this is some text

Comme vous le voyez, c'est un moyen de définir des "variables variables". Autrement dit, utiliser des variables dont le contenu est le nom d'une autre variable.

De Manuel de référence Bash → 3.5.3 Extension des paramètres du shell:

Si le premier caractère du paramètre est un point d'exclamation (!), Et paramètre n'est pas un Nameref, il introduit un niveau d’indirection variable. Bash utilise la valeur de la variable formée à partir du reste du paramètre comme nom de la variable. cette variable est ensuite développée et cette valeur est utilisée dans le reste de la substitution, plutôt que la valeur de paramètre lui-même. Ceci est connu sous le nom d'expansion indirecte. Si le paramètre est un Nameref, cela se développe au nom de la variableréférencé par paramètre au lieu d’effectuer l’extension indirecte complète. Les exceptions à cette règle sont les extensions de $ {! Prefix *} et $ {! Name [@]} décrites ci-dessous. Le point d'exclamation doit immédiatement suivre l'accolade de gauche afin d'introduire l'indirection.