Hallo, ich habe eine Variable, zum Beispiel: INC=file1 Es existiert eine Datei /mydir/file1 welche ich so includiere: . /mydir/${INC} Das klappt auch wunderbar (ein echo "XYZ" in der Datei gibt zumindest XYZ aus). Alle dort definierten Variablen beginnen mit file1. Eine Variable file1_LIST sieht zum Beispiel so aus: file1_LIST="Z1 Z2 Z3" Nun m?chte ich alle Zx ausgeben: for zx ${$file1_LIST} do echo $zx done Das klappt so nicht :( Auch in anderen Varianten erhalte ich als Ergebnis entweder $file1_LIST ausgegeben oder den Fehler 'Bad substitution'. Wie kann ich den Inhalt einer solch 'dynamischen' Variable auslesen? Im besonderen in einer for Schleife? -sa -- sa at programmers-world dot com http://www.livingit.de 09:29 Internet sites: http://www.not2long.net - Make long links short Boomarks online: http://www.mobile-bookmarks.info
Am Fre, 2004-03-05 um 09.30 schrieb Sascha Andres:
Hallo,
ich habe eine Variable, zum Beispiel:
INC=file1
Es existiert eine Datei /mydir/file1 welche ich so includiere:
. /mydir/${INC}
Das klappt auch wunderbar (ein echo "XYZ" in der Datei gibt zumindest XYZ aus). Alle dort definierten Variablen beginnen mit file1. Eine Variable file1_LIST sieht zum Beispiel so aus:
file1_LIST="Z1 Z2 Z3"
Nun m?chte ich alle Zx ausgeben:
for zx ${$file1_LIST} do echo $zx done
versuch mal for zx in $file1_LIST;do echo $zx;done
Das klappt so nicht :( Auch in anderen Varianten erhalte ich als Ergebnis entweder $file1_LIST ausgegeben oder den Fehler 'Bad substitution'.
Wie kann ich den Inhalt einer solch 'dynamischen' Variable auslesen? Im besonderen in einer for Schleife?
-sa
-- sa at programmers-world dot com http://www.livingit.de 09:29 Internet sites: http://www.not2long.net - Make long links short Boomarks online: http://www.mobile-bookmarks.info
Jochen
Hi, * Am 05.03.2004 (10:25) schrieb Jochen Schäfer:
versuch mal for zx in $file1_LIST;do echo $zx;done
Ein Schleifendurchlauf mit dem Wert
On Fri, Mar 05, 2004 at 11:00:14AM +0100, Sascha Andres wrote:
* Am 05.03.2004 (10:25) schrieb Jochen Schäfer:
versuch mal for zx in $file1_LIST;do echo $zx;done
Ein Schleifendurchlauf mit dem Wert
_LIST.
Ein Schleifendurchlauf? Ist IFS geändert worden? Bsp:
#!/bin/bash
file1_LIST="Z1
Z2
Z3"
IFS=' '
for zx in ${file1_LIST}; do
echo ">$zx<"
done
IFS=$'\n'
for zx in ${file1_LIST}; do
echo ">$zx<"
done
Wegen der Schreibweise
Hi, * Am 05.03.2004 (11:56) schrieb Stefan Tichy:
#!/bin/bash A1=A; A2=B; A3=C; A4=D
for I in $(seq 1 4); do eval VAR=\$A$I echo "$I: $VAR" done
Habs mal so probiert: # file1=test echo $test_LIST # A B C D eval VAR=\$file1_ALLOW_IN echo $VAR # Leerzeile Ich muß also den eval Befehl noch falsch verwenden... -sa -- sa at programmers-world dot com http://www.livingit.de 13:21 Internet sites: http://www.not2long.net - Make long links short Boomarks online: http://www.mobile-bookmarks.info
Hi, Ich meinte eher so: file1=test # Inhalt von test includieren, # alle variablen fangen mit test an . ${file1} for zx in $file1_LIST # Variablenname: test_LIST do # w?re file1=var: var_LIST echo $zx done Ich m?chte also einen Variablennamen zusammenbauen. Das eval sah ganz iteressant aus. -sa -- sa at programmers-world dot com http://www.livingit.de 13:24 Internet sites: http://www.not2long.net - Make long links short Boomarks online: http://www.mobile-bookmarks.info
Hi, * Am 05.03.2004 (13:41) schrieb Peter Wiersig:
Woher soll die Bash wissen, das sie nur $file1 austauschen soll. Du meinst: for zx in ${file1}_LIST
Nein, meine ich nicht, denn: ,----[ test.sh ]- | #! /bin/sh | | file1=test | | test_LIST="1 | 2 | 3" | | echo ${file1}_LIST | | for zx in ${file1}_LIST | do | echo $zx | done `---- und die Ausgabe: ,----[ test_out ]- | test_LIST | test_LIST `---- Sie sollte aber so sein: ,----[ test_should ]- | 1 2 3 | 1 | 2 | 3 `---- ${file1}_LIST war mein erster Ansatz, er hat aber nicht funktioniert. Daher hab ich den Thread hier erst gestartet. -sa -- sa at programmers-world dot com http://www.livingit.de 14:00 Internet sites: http://www.not2long.net - Make long links short Boomarks online: http://www.mobile-bookmarks.info
Sascha Andres wrote:
${file1}_LIST war mein erster Ansatz, er hat aber nicht funktioniert. Daher hab ich den Thread hier erst gestartet.
Und so: ${${file1}_LIST} ? Das koennte man auch so schreiben $$file1_LIST, bleibt aber das Problem, das der Bash-Parser nicht entscheiden kann, das du die Variable file1 und den String _LIST meinst. Du musst schon mit geschweiften Klammern helfen. -- Have fun, Peter
On Fri, Mar 05, 2004 at 02:32:35PM +0100, Peter Wiersig wrote:
Sascha Andres wrote:
${file1}_LIST war mein erster Ansatz, er hat aber nicht funktioniert. Daher hab ich den Thread hier erst gestartet.
Und so: ${${file1}_LIST} ?
Nein, das akzeptiert die Bash nicht.
Das koennte man auch so schreiben $$file1_LIST, bleibt aber das
Und das ist etwas anderes: $$ liefert die pid. #!/bin/bash test_LIST="Z1 Z2 Z3" file1=test eval VAR=\$${file1}_LIST echo "$VAR" -- Stefan Tichy ( s.list at pi4tel dot de )
Hallo, Am Fri, 05 Mar 2004, Sascha Andres schrieb:
* Am 05.03.2004 (13:41) schrieb Peter Wiersig:
Woher soll die Bash wissen, das sie nur $file1 austauschen soll. Du meinst: for zx in ${file1}_LIST
Nein, meine ich nicht, denn:
,----[ test.sh ]- | #! /bin/sh ^^^^^^^ bitte "/bin/bash" verwenden, wenn du nicht sicher bist, dass alles bourne-kompatibel ist. Zum testen: /bin/ash, die ist weitgehend wie die bourne.
| file1=test | | test_LIST="1 | 2 | 3" | | echo ${file1}_LIST | | for zx in ${file1}_LIST | do | echo $zx | done `----
for zx in `eval echo "\\${${file1}_LIST}"`; do ...; done Kannst du natuerlich auch mit ner extra Variablen machen: eval list="\${${file1}_LIST}" for zx in $list; do ...; done -dnh -- Words fail me. Thank goodness I can make gestures. -- Mark Hughes
Hi, * Am 05.03.2004 (16:56) schrieb David Haller:
for zx in `eval echo "\\${${file1}_LIST}"`; do ...; done
Kannst du natuerlich auch mit ner extra Variablen machen:
eval list="\${${file1}_LIST}" for zx in $list; do ...; done
Danke, klappt ;) -sa -- sa at programmers-world dot com http://www.livingit.de 12:42 Internet sites: http://www.not2long.net - Make long links short Boomarks online: http://www.mobile-bookmarks.info
participants (5)
-
David Haller
-
jo_sch@t-online.de
-
Peter Wiersig
-
Sascha Andres
-
Stefan Tichy