Wie drucke ich den Variablennamen zusammen mit seinem Wert?


10

Gibt es eine Möglichkeit, den Variablennamen zusammen mit seinem Wert zu drucken?

j=jjj
k=kkk
l=lll

for i in j k l
do
    ....
done

Erwartete Ausgabe (jede Variable in einer separaten Zeile):

j = jjj 
k = kkk
l = lll

Kann jemand einen Weg vorschlagen, um das obige Ergebnis zu erzielen?


Antworten:


20

Auf einfache Weise:

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

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

Die Ausgabe:

j = jjj
k = kkk
l = lll

  • ${!i}- Bash- Variablenerweiterung / Indirektion (erhält den Wert des Variablennamens von $i)

2
Sie können {j,k,l}kurz machen mit {j..l}auch
:)

@ αғsнιη, es ist vernünftig für erweiterte Reichweiten, solange es nur 3 Artikel gibt - {j,k,l}wäre genug
RomanPerekhrest

1
j k lwäre genug.
Stéphane Chazelas

6

Wenn Sie bash v4.4 oder höher haben, können Sie den ${VAR@A}Parametererweiterungsoperator verwenden.

Dies wird im Bash-Handbuch unter Abschnitt 3.5.3 Erweiterung der Shell-Parameter erläutert

'A' Operator

Die Erweiterung ist eine Zeichenfolge in Form einer Zuweisungsanweisung oder eines Deklarationsbefehls, der bei Auswertung Parameter mit seinen Attributen und Werten neu erstellt.

Damit können Sie also Folgendes tun:

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

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

Und Ihr Ergebnis sollte sein:

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

5

Oder in zshGebrauchdeclare -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
arbeitet auch mit Bash
Steven Penny

2

Obwohl ${!i}es sich um eine sauberere und schnellere Lösung handelt, kann der Vollständigkeit halber die indirekte Referenz auch anhand des folgenden Beispiels erhalten werden:

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

Deshalb:

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

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

Gibt:

 j = jjj
 k = kkk
 l = lll

Verweise:

Indirekte Referenzen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.