次のように、IFS を改行に設定します。
IFS='
'
for x in `ls -l $1`; do echo $x; done
IFS を永続的に設定したくない場合は、その周りにサブシェルを置きます:
(IFS='
'
for x in `ls -l $1`; do echo $x; done)
または while | を使用します。代わりに読んでください:
ls -l $1 | while read x; do echo $x; done
同じシェル レベルで while/read を実行するもう 1 つのオプション:
while read x; do echo $x; done << EOF
$(ls -l $1)
EOF
すでに述べたように、awk はこれに適したツールです。 awk を使用したくない場合は、「ls -l」の出力を 1 行ずつ解析する代わりに、すべてのファイルを反復処理して、次のように個々のファイルごとに「ls -l」を実行できます。
for x in * ; do echo `ls -ld $x` ; done
各行で何をしたいかによって異なります。 awk は、このタイプの処理に役立つユーティリティです。例:
ls -l | awk '{print $9, $5}'
.. 私のシステムでは、ディレクトリ内の各アイテムの名前とサイズが出力されます。