Como imprimir o nome da variável junto com seu valor?


Respostas:


21

De maneira simples:

j="jjj"
k="kkk"
l="lll"

for i in {j,k,l}; do echo "$i = ${!i}"; done

A saída:

j = jjj
k = kkk
l = lll

  • ${!i}- expansão / indireção da variável bash (obtém o valor do nome da variável mantido por $i)

2
Você pode fazer um {j,k,l}short com {j..l}também
:)

@ αғsнιη, é razoável para intervalos prolongados, enquanto houver apenas 3 itens - {j,k,l}seria suficiente
RomanPerekhrest

1
j k lseria o suficiente.
Stéphane Chazelas

6

Se você tiver o bash v4.4 ou posterior, poderá usar o ${VAR@A}operador de expansão Parameter.

Isso é discutido no manual do Bash, na seção 3.5.3 Expansão dos parâmetros do shell

Operador 'A'

A expansão é uma sequência na forma de uma instrução de atribuição ou comando de declaração que, se avaliada, recriará o parâmetro com seus atributos e valor.

Então, com isso, você pode fazer:

j="jjj"
k="kkk"
l="lll"

for i in {$j,$k,$l}; do 
    echo "${i@A}"
done

E seu resultado deve ser:

j='jjj'
k='kkk'
l='lll'

5

Ou em zshusodeclare -p

% j=jjj; k=kkk; l=(l l l)               
% for v in j k l; do declare -p $v; done
typeset j=jjj
typeset k=kkk
typeset -a l=( l l l )
% 

3
trabalha com Bash também
Steven Penny

2

Embora ${!i}seja uma solução mais limpa e rápida, para garantir a integridade, a referência indireta também pode ser obtida com o seguinte exemplo:

 foo=bar
 bar=baz
 $ echo $foo
 bar
 $ eval echo \$${foo}
 baz

Portanto:

 j="jjj"
 k="kkk"
 l="lll"

 for i in {j,k,l}; do
   echo "$i = `eval echo \\$${i}`"
 done

Dá:

 j = jjj
 k = kkk
 l = lll

Referências:

Referências Indiretas

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.