Referência da variável bash de uma variável [duplicada]

0

Como posso referenciar uma variável no bash com base em outra variável? Deixe-me configurar o exemplo:

package="foobar"

# the variable I wish to reference is $foobar_darwin_amd64
# thus trying:
echo "$package_darwin_amd64"

Mas isso não funciona.

    
por Justin 01.02.2018 / 00:27

3 respostas

2

Se o seu shell suporta a forma ${!varname} de referências indiretas, você pode fazer (como sugerido por @Barmar):

$ foobar_darwin_amd64=pinto
$ package=foobar
$ varname="${package}_darwin_amd64"
$ echo ${!varname}
pinto

Caso contrário, você pode usar eval :

$ foobar_darwin_amd64=pinto
$ package=foobar
$ eval echo \$${package}_darwin_amd64
pinto

Dito isso, usar eval tem alguns riscos associados a ele, veja este link para mais discussões.

    
por 01.02.2018 / 00:31
1

Aqui está a solução que funcionou para mim:

VARNAME="${package}_darwin_amd64"
echo "${!VARNAME}"
    
por 01.02.2018 / 00:49
1

No bash v4, você pode usar um " nameref "

$ foobar_darwin_amd64=pinto
$ package=foobar
$ declare -n var=${package}_darwin_amd64
$ echo $var
pinto
    
por 01.02.2018 / 01:32