Schleife in bash/zsh

24/09/2009 - 22:51 von Michael Baeuerle | Report spam
Hallo,

ich habe folgendes Problem: Ein Skript soll der Reihe nach ein paar
Tools testen deren Namen alle in _einer_ Variable stehen. Je nach Shell
funktioniert nun aber meine Schleife nicht. Sieht vereinfacht so aus:

$ VAR="1 2 3"
$ for x in $VAR; do echo "$x"; done
1
2
3

So wie oben funktioniert es mit mit der bash (mit der Heirloom sh IIRC
auch). Mit der zsh passiert aber das hier:

$ VAR="1 2 3"
$ for x in $VAR; do echo "$x"; done
1 2 3

Es wird also alles auf einmal zugewiesen (x="1 2 3"). Welches Verhalten
ist POSIX-konform und wie macht man das sinnvollerweise, dass es auch
mit zsh funktioniert? VAR1="1", VAR2="2", VAR3="3" wollte ich vermeiden.


Micha
Liegt aber vermutlich [...] am neuen boesen KDE. Man laestert ja immer
gerne ueber Microsoft, aber was sie da abgeliefert hat kann sich mit
Vista messen und das meine ich nicht positiv.
Olaf Kaluza in dcoulh
 

Lesen sie die antworten

#1 Frank Terbeck
24/09/2009 - 23:27 | Warnen spam
Michael Baeuerle :
ich habe folgendes Problem: Ein Skript soll der Reihe nach ein paar
Tools testen deren Namen alle in _einer_ Variable stehen. Je nach Shell
funktioniert nun aber meine Schleife nicht. Sieht vereinfacht so aus:

$ VAR="1 2 3"
$ for x in $VAR; do echo "$x"; done
1
2
3

So wie oben funktioniert es mit mit der bash (mit der Heirloom sh IIRC
auch). Mit der zsh passiert aber das hier:

$ VAR="1 2 3"
$ for x in $VAR; do echo "$x"; done
1 2 3

Es wird also alles auf einmal zugewiesen (x="1 2 3"). Welches Verhalten
ist POSIX-konform und wie macht man das sinnvollerweise, dass es auch
mit zsh funktioniert? VAR1="1", VAR2="2", VAR3="3" wollte ich vermeiden.



POSIX Verhalten ist das der bash.

In zsh würde ich Arrays benutzen. Oder temporàr die sh_word_split
Option setzen. Und zwar so: for x in ${=VAR}; do ...

Aber wenn man eh schon in der zsh skriptet, dann sollte man wirklich
einfach Arrays nehmen.

Gruß Frank

Ähnliche fragen