Ich möchte mit einer for-Schleife eine Liste von Variablen abarbeiten. Die Variablen sind immer gleich aufgebaut, ABC_(Nummer von 0 bis 40). Mein erster Ansatz sieht so aus
for k in (0..50); do
echo $ABC_$k
done
Funktioniert natürlich nicht, wie stelle ich es denn an das zuerst $k abgefragt wird und dann alles (also z.B. $ABC_25)?
Variablen zusammen setzten
Abgesehen davon, dass ich nur einen Syntaxfehler bei deinem Beispiel bekomme …
for k in $(seq 0 50); do
echo \$ABC_$k
done
Das schreibt $ABC_0
bis $ABC_50
als Ausgabe.
Andy@Arch for k in (0..50); do
Du musst für Bereiche eine geschweifte Klammer verwenden
Andy@Arch echo $ABC_$k
Der Unterstrich muss in Literals eingeschlossen werden, sonst wird er als Teil der Variablen interpretiert, also $ABC_
statt $ABC
, was dann zu keinem Ergebnis führt
So müsste es funktionieren:
for k in {0..50}; do echo $ABC'_'$k; done
Die Klammern waren ein Tippfehler, das kommt davon wenn man schnell mal was macht.
Habe mich wohl falsch ausgedrückt, ich möchte nicht $ABC_0 bis $ABC_50 als Ausgabe, sondern diese Variablen per Schleife ausgeben.
ABC_0="D"
ABC_1="i"
ABC_2="e"
ABC_3="s"
ABC_4=" "
ABC_5="i"
ABC_6="s"
ABC_7="t"
ABC_8=" "
ABC_10="e"
ABC_11="i"
ABC_12="n"
ABC_13=" "
ABC_14="T"
ABC_15="e"
ABC_16="s"
ABC_17="t
Wenn ich dich richtig verstanden habe:
for k in {0..50}; do v=ABC_$k; echo "$v=\""${!v}"\""; done
Aber vermutlich gibt es bessere Lösungen, um dein unbekanntes Problem zu lösen.
…oder so:
for k in {0..50}; do eval X='$'ABC_$k; echo $X; done
- Bearbeitet
Vielleicht kannst du auch ein Array dafür nutzen.
Danke es funktioniert, wieder was gelernt.