Wie drucke ich den Variablennamen zusammen mit seinem Wert?

Kann ich den Variablennamen zusammen mit seinem Wert auf irgendeine Weise 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 erhalten?

Kommentare

Antwort

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 Variablenexpansion / -indirektion (ruft den Wert des Variablennamens ab, der von $i gehalten wird)

Kommentare

  • Sie können {j,k,l} mit {j..l} auch kurz machen 🙂
  • @ αғsнιη, es ' ist für erweiterte Bereiche sinnvoll, solange es nur 3 davon gibt ems – {j,k,l} würde ausreichen
  • j k l würde ausreichen.
  • Antwort

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

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

    „A“ Operator

    Die Erweiterung ist eine Zeichenfolge in Form einer Zuweisungsanweisung oder eines Deklarationsbefehls, der, wenn ausgewertet, erstellt den Parameter mit seinen Attributen und seinem Wert neu.

    Damit können Sie 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" 

    Antwort

    Oder verwenden Sie in zsh declare -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 ) % 

    Kommentare

    • funktioniert auch mit Bash

    Antwort

    Während ${!i} eine sauberere und schnellere Lösung ist, ist der Vollständigkeit halber die indirekte Eine Referenz kann auch anhand des folgenden Beispiels erhalten werden:

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

    Daher:

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

    ives:

     j = jjj k = kkk l = lll 

    Referenzen:

    Indirekte Referenzen

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.