Expandir indiretamente variáveis ​​no shell

9

Preciso fazer referência indireta a uma variável no bashshell.

Eu basicamente quero o que você pode fazer makeescrevendo $($(var)).

Eu tentei usar ${$var}qual seria a solução mais direta, bashmas então eu recebo este erro:

bash: ${$var}: bad substitution

Existe uma maneira de fazer isso?

O que estou tentando fazer é iterar sobre todos os argumentos ( $1, $2, $3, ...) para um programa usando uma variável de iteração e eu não posso fazer isso sem dissimulação.

wefwefa3
fonte

Respostas:

13

Se você tem var1=fooe foo=bar, pode começar bardizendo ${!var1}. No entanto, se você deseja iterar sobre os parâmetros posicionais, é quase certamente melhor fazer

for i in "$@"; do
    # something
done
Tom Hunt
fonte
Existe uma maneira de adicionar vários níveis de indireção?
Wefwefa3
1
Não que eu possa encontrar rapidamente. O palpite óbvio de ${!!var1}não funciona. No entanto, você sempre pode fazê-lo manualmente, por exemplo tmp=${!var1}; echo ${!tmp}.
Tom Hunt
3

Usando /bin/bash:

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

# prints -> bar
Nick Grealy
fonte