Portál AbcLinuxu, 27. července 2025 09:14
ls -Q *.txt
"AA BB.txt" "CC DD.txt" "EE FF.txt"
když zkusím
for XXX in "AA BB.txt" "CC DD.txt" "EE FF.txt"; do echo $XXX; done
AA BB.txt
CC DD.txt
EE FF.txt
což je dobře, bohužel "naostro" to dopadne špatně
for XXX in `ls -Q *.rtf`; do echo $XXX; done
"AA
BB.txt"
"CC
DD.txt"
"EE
F.txt"
Proč mi to ta mrcha bash dělá ???
Vůbec si nejsem jistý a s bashem to neumím, takže jenom střela do prázdna: mezera má escape sekvenci "\ ", jakože třeba pokdu chci jít do adresáře "dd aa", tak musím dát "cd dd\ aa". Ale možná je to úplně mimo...
for XXX in *.rtf; do echo "$XXX"; done
ls
a uvědom si, jak pracuje for
– rozděluje podle bílých znaků, více viz man bash
. Ten for
neví, že má vstup z ls
a že má tedy rozdělovat jen podle \n
(nových řádků). Tak mu to řekneme:
( IFS='\n'; for x in `ls *`; do echo $x; done )Mimochodem, doporučuji také příkazy
find
a xargs
`ls *`
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.