Suponha que eu tenha uma variável var
no bash. Eu posso atribuir um valor a ele. Por exemplo, vou fazer uma string:
var="Test"
Eu quero echo
o nome de var
, não o valor mantido por var
. (Eu posso fazer o último com echo $var
, mas realmente quero fazer o primeiro.)
A resposta para esta pergunta do SO diz para usar echo ${!var}
, mas quando faço isso, eco apenas retorna uma linha em branco. Por exemplo, este script bash
#!/bin/bash
echo "Hi"
var="Test"
echo ${!var}
echo "Bye"
retorna esta saída:
Hi
Bye
com apenas uma linha em branco entre Hi e Bye , em vez de var . O que estou fazendo de errado?
Estou executando o bash 4.1.5 (1) no Ubuntu 10.04.4 .
echo var
?var=Test; Test=SO; echo ${!var}
Respostas:
A expansão do parâmetro shell $ {! Name @} ou $ {! Name *} poderia fazer o truque,
Embora viável, não consigo imaginar a utilidade disso ...
fonte
foo
não estiver definido, masfoobar
estiver, você receberáfoobar
. Outras alternativas:var_name=${-+foo}
(ou${foo+foo}
),var_name=$'foo'
,var_name=$"foo"
:-)${!foo@}
seria avaliada comofoo foobar
. Como observa a resposta, é difícil imaginar sua utilidade.Se você deseja simplesmente emitir um nome de variável estática, pode escapar do
$
-sign:fonte
$var
, mas será inútil se o nome da variável for dinâmico. Por exemplo, digamos que você precise filtrar um conjunto de variáveis de ambiente começando com umPREFIX_
, mas você não sabe sobre o tamanho do conjunto ou os nomes de variáveis nele. A solução aceita é mais adequada para esse cenário.