variable expansion

J

jahsoldier

Grünschnabel
Hallo,

ich habe folgendes Problem. Ich habe eine mir vorher unbekannte Anzahl an Variablen der Form
Code:
VARIABLE_AA="Inhalt 1"
VARIABLE_AB="Inhalt 2"
VARIABLE_AC="Inhalt 3"
...
Nun möchte ich von allen definierten Variablen den Inhalt auslesen und weiterverarbeiten. Habe dabei an folgendes gedacht:
Code:
for i in ${!VARIABLE_*}
do
      var=$i
      ...
done
Hier wird der Variablen "var" aber nur der Name der Variablen "VARIABLE_*" zugewiesen, nicht aber deren Inhalt!

Kennt jemand eine Möglichkeit, wie ich der Variable "var" den Inhalt der Variablen "VARIABLE_*" zuweisen kann? Oder gibt es für dieses Problem eine elegantere Lösung?

Grüße
 
eval ist dein Freund:
Code:
VARIABLE_AA="Inhalt 1"
VARIABLE_AB="Inhalt 2"
VARIABLE_AC="Inhalt 3"
for foo in VARIABLE_{A,B,C}{A,B,C}; do
    var=$(eval echo \$$(echo $foo))
    [ "$var" ] && echo $var
done
Zum besseren Verständnis schau dir auch mal die Ausgabe von
Code:
echo bla{x,y}{4,8}
oder so an. (Damit wird die Variablen-Namen Liste erzeugt.)

edit: So isses irgendwie übersichtlicher:
Code:
for foo in \$VARIABLE_{A,B,C}{A,B,C}; do
     var=$(eval echo $foo)
     [ "$var" ] && echo $var
done
Je nachdem, wieviele Möglichkeiten es gibt, kannst du auch über größere potentielle Variablennamen iterieren. Zum Beispiel eine Liste von VARIABLE_AA bis VARIABLE_ZZ:
Code:
echo VARIABLE_{A..Z}{A..Z}

edit²: grade erst den Sinn des ${!VARIABLE*} erfasst. Dann könntest du deinen Loop so umgestalten:
Code:
for i in ${!VARIABLE_*}
do
      var=$(eval echo \$$i)
      #...
done
 
Zuletzt bearbeitet:
vielen dank,

das funktioniert ausgezeichnet!

Grüße
 

Ähnliche Themen

Textdatei zeilenweise in durchnummerierte Variablen schreiben

Benötige Hilfe- Dateien vergleichen

Variable automatisch hochsetzten

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

verzeichniss suche funktioniert nicht

Zurück
Oben