Comment imprimer le nom de la variable avec sa valeur?


Réponses:


21

De manière simple:

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

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

Le résultat:

j = jjj
k = kkk
l = lll

  • ${!i}- expansion / indirection de la variable bash (obtient la valeur du nom de la variable détenue par $i)

2
Vous pouvez faire {j,k,l}court avec {j..l}aussi
:)

@ αғsнιη, c'est raisonnable pour des plages étendues, tant qu'il n'y a que 3 articles - ce {j,k,l}serait suffisant
RomanPerekhrest

1
j k lserait suffisant.
Stéphane Chazelas

6

Si vous avez bash v4.4 ou une version ultérieure, vous pouvez utiliser l' ${VAR@A}opérateur d'expansion des paramètres.

Ceci est discuté dans le manuel Bash à la section 3.5.3 Expansion des paramètres du shell

Opérateur «A»

L'expansion est une chaîne sous la forme d'une instruction d'affectation ou d'une commande declare qui, si elle est évaluée, recréera le paramètre avec ses attributs et sa valeur.

Donc, avec cela, vous pouvez faire:

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

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

Et votre résultat devrait être:

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

5

Ou en cours d' zshutilisationdeclare -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
fonctionne aussi avec Bash
Steven Penny

2

Bien qu'il ${!i}s'agisse d'une solution plus propre et plus rapide, pour être complète, la référence indirecte peut également être obtenue avec l'exemple suivant:

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

Donc:

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

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

Donne:

 j = jjj
 k = kkk
 l = lll

Références:

Références indirectes

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.