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.

wefwefa3
la source

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
Tom Hunt
la source
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
Nick Grealy
la source