web-dev-qa-db-ja.com

インラインforループコマンドからの改行としてのスペース

最初のコマンドのスペースが改行として解釈されるように見える理由について、誰かが私に教えてくれませんか?また、echoの代わりにprintを使用することもあります。

$for l in $( find *.txt -exec head -1 {} \; ); echo $l;
9.16.11 
 09:20 
 9.19.11 
 18.41 
 9.21.11 
 07:15
$find *.txt -exec head -1 {} \;
 9.16.11 09:20 
 9.19.11 18.41 
 9.21.11 07:15
5

特にIFSグローバル変数を調べているシェルのマニュアルページを確認してください。

具体的には、次のようにします。

IFS=$(echo -en "\t\n\0")

3
frogstarr78

コマンド置換は、IFSに基づいて、出力でWord分割を引き起こします。具体的には、この場合はスペースで分割されます。 findの出力を解析しないでください。代わりに、これを行います。

for file in *.txt; do
    head -1 "${file}"
done

Wooledge wikiには、この問題に関するいくつかの良い情報もあります ここ

5
Chris Down