Kod: Markera allt
for dir in `\ls|grep '\ '`; do echo $dir; done
Kod: Markera allt
for dir in `\ls|grep '\ '`; do echo $dir; done
Kod: Markera allt
for i in *\ *; do echo "$i"; done
Varför fungerar det där, men inteKonservburk skrev:Kod: Markera allt
for i in *\ *; do echo "$i"; done
Kod: Markera allt
for dir in `\ls|grep '\ '`; do echo "$dir"; done
Resultatet av det inre kommandot blir en enda lång sträng som sedan delas upp enligt $IFS utan att skalet har den blekaste aning om vad de faktiska filnamnen egentligen är.dmz skrev:Varför fungerar det där, men inte?Kod: Markera allt
for dir in `\ls|grep '\ '`; do echo "$dir"; done
Kod: Markera allt
Blank interpretation.
After parameter and command substitution, any results of substitution
are scanned for internal field separator characters (those found in
$IFS) and split into distinct arguments where such characters are
found.
Misstänker att du har någon snygg workaround?Konservburk skrev:Ska man vara riktigt petig så bör man se upp även med mitt förslag eftersom globben inte kommer att expandera ifall det inte finns några filnamn som innehåller mellanslag. Det som då händer är att for-loopen istället behåller själva globben, dvs "* *", och kör ett varv med den.
Det beror lite på vad du tänker göra. Du kan t.ex. testa så att loop-variabeln är ett filnamn som verkligen finns:dmz skrev:Misstänker att du har någon snygg workaround?Konservburk skrev:Ska man vara riktigt petig så bör man se upp även med mitt förslag eftersom globben inte kommer att expandera ifall det inte finns några filnamn som innehåller mellanslag. Det som då händer är att for-loopen istället behåller själva globben, dvs "* *", och kör ett varv med den.
Kod: Markera allt
for i in *\ *; do if test -e "$i"; then echo "$i"; fi; done
Kod: Markera allt
find -maxdepth 1 -name '* *' -exec echo {} \;