dynamische Variablen mit eval

Ich habe ein Script geschrieben, das sequenziell Variablennamen vergibt. Es ging mir darum, eine Schleife zu bauen und für jeden Durchlauf der Schleife eine neue Variable zu setzen. Später will ich diese Variablen natürlich wieder auslesen. Das klingt einfacher, als es ist. Damit das in einer bash funktioniert, benötigt man den Befehl eval.

Das Dumme ist nur, der Befehl hat gar keine man page, auf der man nachlesen könnte, was er macht und wie er es macht. In einem Satz kann man sagen: eval evaluiert deinen Ausdruck ein weiteres Mal vor der Ausführung.

Angenommen, ich möchte die Variablen X0 bis X3 setzen und wieder auslesen. So geht es nicht:

for N in $(seq 0 3); do
  X$N=hallo$N
  echo $X$N
done

Der output davon ist:

X0=hallo0: command not found
0
X1=hallo1: command not found
1
X2=hallo2: command not found
2
X3=hallo3: command not found
3

Mache ich aber ein eval davor, ein paar Klammern und Slashes dazu, dann klappt es:

for N in $(seq 0 3) ; do
  eval X$N=hallo$N
  eval echo \${X$N}
done

Der Output ist:

hallo0
hallo1
hallo2
hallo3

Das funktioniert übrigens auch mit arrays. Die dafür nötigen eckigen Klammern [] müssen vor die Abschliessende geschweifte bei der Ausgabe.

Advertisements
dynamische Variablen mit eval

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s