Am Samstag, 9. Oktober 2004 23:11 schrieb Uwe Malzahn: > Am Samstag, 9. Oktober 2004 21:45 schrieb Dirk Richter: > > for i in `ls *.jpg` ; do echo $i ; done [...] > for i in *.jpg ; do echo $i ; done > /tmp$ ls *.jpg > bar.jpg foo bar.jpg foo.jpg > /tmp$ for i in *.jpg ; do echo $i ; done > bar.jpg > foo bar.jpg > foo.jpg
Das ist nicht das Gleiche: [EMAIL PROTECTED]:~/tmp/leer> touch "a b c.jpg" "a b c.jpg" [EMAIL PROTECTED]:~/tmp/leer> ls -l insgesamt 0 -rw-r--r-- 1 jan users 0 2004-10-10 01:29 a b c.jpg -rw-r--r-- 1 jan users 0 2004-10-10 01:29 a b c.jpg [EMAIL PROTECTED]:~/tmp/leer> for i in *.JPG; do echo $i; done *.JPG [EMAIL PROTECTED]:~/tmp/leer> for i in `ls *.JPG`; do echo $i; done /bin/ls: *.JPG: Datei oder Verzeichnis nicht gefunden Und noch was: Vorsicht mit ungequoteten Argumenten: [EMAIL PROTECTED]:~/tmp/leer> for i in *.jpg; do echo $i; done a b c.jpg a b c.jpg [EMAIL PROTECTED]:~/tmp/leer> for i in *.jpg; do echo "$i"; done a b c.jpg a b c.jpg Mit folgender Variante klappt es auch mit Leerzeichen: [EMAIL PROTECTED]:~/tmp/leer> ls *.jpg | while read i; do echo "$i"; done a b c.jpg a b c.jpg [EMAIL PROTECTED]:~/tmp/leer> ls *.JPG | while read i; do echo "$i"; done /bin/ls: *.JPG: Datei oder Verzeichnis nicht gefunden Der Nachteil ist hier, dass die Schleife in einer Subshell abl�uft (also innerhalb der Schleife gesetzte Variablen aussen nicht sichtbar sind): [EMAIL PROTECTED]:~/tmp/leer> f="xyz" [EMAIL PROTECTED]:~/tmp/leer> ls *.jpg | while read i; do f="$i"; done [EMAIL PROTECTED]:~/tmp/leer> echo $f xyz Will man das umgehen, dann greift man doch wieder auf die for-Schleife zur�ck und stellt in der Schleife sicher, dass es tats�chlich Dateien gibt: [EMAIL PROTECTED]:~/tmp/leer> for i in *.JPG; do test -f "$i" || break; echo "$i"; done Jan P.S.: Die "Intelligenz" der for-Schleife ist nicht kompatibel zu anderen Shells. -- Linux-Quickies: http://www.jan-trippler.de PingoS: http://www.pingos.org

