Wie kürzt man eine Liste von Variablennamen in Bash?

Wie kürzt man eine Liste von Variablennamen in Bash?

In einem Shell-Skript habe ich eine Liste von Variablen, die ich als $a, $b, $c usw. sortiert habe. Ich möchte diese Variablen ausdrucken, ohne alle Variablen auflisten zu müssen. Mein aktueller Code lautet wie folgt:

a=1
b=2
c=3
d=4
e=5
f=6
g=7

for x in $a$b$c$d$e$f$g
do
  echo "$x"
done

Kann ich $a$b$c$d$e$f$g zu etwas abkürzen, das sich auf $a bis $g bezieht?

Antwort1

Verwendung von "böse" eval:

eval echo \"$(printf '$%s' {a..g})\"

Beachten Sie, dass ich Escape-Anführungszeichen verwendet habe. Diese sind für eine korrekte Ausgabe erforderlich, wenn Ihre Variablen Leerzeichen enthalten sollen.


Oder verwenden Sie die korrigierte For-Schleife deserste Antwort:

for x in {a..g}; do printf "${!x}"; done


Oder verwenden Sie ein Array in Ihrem Skript. Das ist zwar eine andere Syntax, aber einfacher zu handhaben, wenn Sie alle Werte auf einmal benötigen. Hier ist ein kleines Beispiel:

array=(1 2 3 4 x 6)
array+=(7)  # add one more
array[4]=5  # modify element at index 4
printf '%s' "${array[@]}"

Beachten Sie, dass die letzten beiden printfAnweisungen nicht mit einer neuen Zeile enden.

verwandte Informationen