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)?

  • Martin-MS hat auf diesen Beitrag geantwortet.

    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

    Vielleicht kannst du auch ein Array dafür nutzen.

    Danke es funktioniert, wieder was gelernt.