Nastavte IFS na nový řádek takto:
IFS='
'
for x in `ls -l $1`; do echo $x; done
Pokud nechcete nastavit IFS natrvalo, dejte kolem něj sub-shell:
(IFS='
'
for x in `ls -l $1`; do echo $x; done)
Nebo použijte při | čtěte místo toho:
ls -l $1 | while read x; do echo $x; done
Ještě jedna možnost, která spustí while/read na stejné úrovni shellu:
while read x; do echo $x; done << EOF
$(ls -l $1)
EOF
Jak již bylo zmíněno, awk je k tomu správný nástroj. Pokud nechcete používat awk, můžete místo analýzy výstupu "ls -l" řádek po řádku iterovat všechny soubory a udělat "ls -l" pro každý jednotlivý soubor takto:
for x in * ; do echo `ls -ld $x` ; done
Záleží, co chcete s každým řádkem dělat. awk je užitečný nástroj pro tento typ zpracování. Příklad:
ls -l | awk '{print $9, $5}'
.. na mém systému vytiskne název a velikost každé položky v adresáři.