Développez indirectement les variables dans le shell


9

J'ai besoin de référencer indirectement une variable dans le bashshell.

Je veux essentiellement ce que vous pouvez faire en makeécrivant $($(var)).

J'ai essayé d'utiliser ${$var}la solution la plus simple, bashmais je reçois cette erreur:

bash: ${$var}: bad substitution

Y a-t-il un moyen de faire cela?

Ce que je suis en train de faire est de parcourir tous les arguments ( $1, $2, $3, ...) à un programme en utilisant une variable d'itération et je ne peux pas le faire sans indirection.

Réponses:


13

Si vous avez var1=fooet foo=bar, vous pouvez obtenir baren disant ${!var1}. Cependant, si vous souhaitez parcourir les paramètres de position, il est presque certainement préférable de le faire

for i in "$@"; do
    # something
done

Existe-t-il un moyen d'ajouter plusieurs niveaux d'indirection?
wefwefa3

1
Pas que je puisse trouver rapidement. La supposition évidente de ${!!var1}ne fonctionne pas. Cependant, vous pouvez toujours le faire manuellement, par exemple tmp=${!var1}; echo ${!tmp}.
Tom Hunt

3

En utilisant /bin/bash:

foo=bar
test=foo
echo ${!test}

# prints -> bar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.