
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 printf
Anweisungen nicht mit einer neuen Zeile enden.