Bash: Stringvariablen substituieren zu einem Variablennamen?

C

computerfrust

Gast
Ich würde gerne Folgendes erreichen:

Code:
#!/bin/bash

letters="a b"

title_a="Max & Moritz"
title_b="Schiller: Die Glocke"

for letter in $letters
do
echo ${title_$letter}
done

Man erkennt es wohl schon, ich möchte zunächst $letter expandieren lassen und erst danach den dadurch fertiggestellten $title_a (_b, _c, ...) auswerten lassen. Ist das überhaupt möglich, oder muss ich auf Arrays zurückgreifen?
 
Das ist ja stark. Ich hab mir ja schon fast gedacht, dass es eine Möglichkeit gibt.
Code:
#!/bin/bash

letters="a b"

title_a="Max & Moritz"
title_b="Schiller: Die Glocke"

for letter in $letters
do
eval "echo \$title_$letter"
done

Ausgabe:
Code:
Max & Moritz
Schiller: Die Glocke

Ohne echo geht es nicht. Und ohne eval auch nicht. Ich verstehe noch nicht ganz die Funktionsweise, aber bin erst mal sehr froh, dass es klappt. Vielen Dank für die schnelle Hilfe!
 
Zuletzt bearbeitet: (Richtige Lösung nachgetragen)
zur funktionsweise würde ich folgendes vermuten:
eval führt einfach einen als string übergebenen befehl aus, als hättest du ihn in der Komandozeile eingegeben.
echo ...
\$ escaped das $ zeichen

der trick ist jetzt, dass du das replacen des werts der einen variablen ($letter) vom script machen lässt und dann das ergebnis an "echo" weitergibst, welches dann den zusammengebauten namen auswertet.
zumindest ist das mein verständnis... freue mich über ausführlichere erklärungen :)
 
Zurück
Oben