Come stampare il nome della variabile insieme al suo valore?


Risposte:


21

In modo semplice:

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

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

Il risultato:

j = jjj
k = kkk
l = lll

  • ${!i}- bash espansione / indiretta variabile (ottiene il valore del nome della variabile detenuto da $i)

2
È possibile effettuare {j,k,l}corto con {j..l}anche:)
αғsнιη

@ αғsнιη, è ragionevole per le gamme estese, purché ci siano solo 3 articoli - {j,k,l}sarebbe sufficiente
RomanPerekhrest

1
j k lsarebbe abbastanza.
Stéphane Chazelas,

6

Se si dispone di bash v4.4 o successive, è possibile utilizzare l' ${VAR@A}operatore di espansione parametri.

Questo è discusso nel manuale di Bash nella sezione 3.5.3 Espansione dei parametri della shell

Operatore "A"

L'espansione è una stringa sotto forma di un'istruzione di assegnazione o di un comando declare che, se valutato, ricrea il parametro con i suoi attributi e valore.

Quindi con questo puoi fare:

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

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

E il tuo risultato dovrebbe essere:

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

5

O in 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
funziona anche con Bash
Steven Penny,

2

Pur ${!i}essendo una soluzione più pulita e veloce, per completezza, il riferimento indiretto può essere ottenuto anche con il seguente esempio:

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

Perciò:

 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

Riferimenti:

Riferimenti indiretti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.