On Sunday 19 June 2005 22:15, Matthias Keller wrote:
Hallo
ich hab hier so ein scriptchen das etwas mit jeder Datei macht die es in einem Verzeichnis gibt. Darin kommt folgendes vor:
for x in `ls -1 $path/ | sed -e 's/\.dd-.*$//' | uniq` ; do ... done
funktioniert soweit perfekt, AUSSER wenn ein filename einen leerschlag enthält, zB "test file.txt" dann wird "test" und "file.txt" separat behandelt...
Alle bisher vorgeschlagenen Lösungen haben den Nachteil, dass die
while-Schleife von einer Sub-Shell ausgeführt wird. Innerhalb des
ursprünglichen for-Loops konnten Variablen gesetzt werden, die nach Ende des
Loops noch erhalten sind. Mit der while-Lösung geht das nicht:
r2@opi:~> a=0;
r2@opi:~> for i in 1 2 3; do a=$i; done
r2@opi:~> echo $a
3
r2@opi:~> a=0;
r2@opi:~> (echo 1; echo 2; echo 3) | while read i; do a=$i; done
r2@opi:~> echo $a
0 <== hier hätte der Unbedarfte auch 3 erwartet
Die Variable a wird nur in der Sub-Shell verändert.
Die Lösung, die mir dazu einfällt ist ein bisschen kompliziert. Vielleicht
kennt jemand eine bessere:
r2@opi:~> a=0
r2@opi:~> mkfifo fifo
r2@opi:~> (echo 1; echo 2; echo 3) >fifo &
[1] 4555
r2@opi:~> while read i