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.

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.