Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
uljanow
- Beiträge: 529
- Registriert: 20.09.2005 21:14:00
Beitrag
von uljanow » 05.12.2007 14:12:44
Hi,
ich finde irgendwie keinen Weg um auf den Inhalt der Variablen one_two in diesem Beispiel zu kommen:
Code: Alles auswählen
#!/bin/sh
foo="one"
bar="two"
one_two="empty"
eval ${foo}_${bar}="full"
echo $one_two
Ausgabe:
Ich würde gerne auf den alten wert "empty" zugreifen wollen. Konstruktionen wie eval ${${foo}_${bar}} funktionieren nicht.
Jemand eine Idee ?
-
yeti
Beitrag
von yeti » 05.12.2007 16:26:14
'man bash' hat geschrieben:If the first character of parameter is an exclamation point, a level of variable indirection is introduced. Bash uses the value of the variable formed from the rest of parameter as the name of the variable; this variable is then expanded and that value is used in the rest of the substitution, rather than the value of parameter itself. This is known as indirect expansion. The exceptions to this are the expansions of ${!prefix*} and ${!name[@]} described below. The exclamation point must immediately follow the left brace in order to introduce indirection.
Code: Alles auswählen
(yeti@xs3:5)~$ cat xxx
#!/bin/sh
foo="one"
bar="two"
one_two="empty"
helper=${foo}_${bar}
echo ${!helper}
(yeti@xs3:5)~$ ./xxx
empty
... mit Bash als Sh klappt es... aber wenn es nicht jede Sh kann, würd ich in die erste Zeile des Skriptes doch lieber Shebang-Bash schreiben...
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 05.12.2007 17:14:29
Da wäre ich wohl nie drauf gekommen.
Was bedeutet denn ${!helper} , also das ! in dem ganzen?
Oh, yeah!