echo $ HOSTNAME resultado se torna chave para uma variável [duplicada]

1

Quem Somos | server1 = abc, def, ghc
server2 = xyz, tes, iuy

#!/bin/sh

echo $server1
abc,def,ghc

echo $HOSTNAME
server1

com essas informações acima, eu quero mostrar a saída "abc, def, ghc" em uma variável de teste.

echo \$$HOSTNAME
$server1

bash-4.1$ test='echo \$$HOSTNAME'
bash-4.1$ echo $test
8722HOSTNAME

Como posso fazer isso em perl / bash?

    
por Diana Sy 04.04.2015 / 06:31

2 respostas

5

man 1 bash diz:

Se o primeiro caractere do parâmetro for um ponto de exclamação (!), será introduzido um nível de indireção de variável. Bash usa o valor da variável formada a partir do resto do parâmetro como o nome da variável; essa variável é então expandida e esse valor é usado no restante da substituição, em vez do valor do próprio parâmetro. Isso é conhecido como expansão indireta.

$ server1=abc,def,ghc
$ HOSTNAME=server1
$ echo ${!HOSTNAME}
abc,def,ghc
    
por 04.04.2015 / 09:31
1

No bash:

$ server1=abc,def,ghc
$ HOSTNAME=server1
$ eval "echo \$$HOSTNAME"
abc,def,ghc

Em Perl (não usando estrito):

$server1 = "abc,def,ghc";
$HOSTNAME = "server1";
print "$$HOSTNAME\n";

As duas variantes não são muito legais e cruzam muitas fronteiras de scripts limpos.

    
por 04.04.2015 / 08:42

Tags