インライン for ループコマンドの改行で空白

インライン for ループコマンドの改行で空白

最初のコマンドのスペースが改行文字として解釈される理由を教えてくれる人はいますか?エコーの代わりに印刷が使用される場合もあります。

$for l in $( find *.txt -exec head -1 {} \; ); echo $l;
2011年9月16日
09:20
2011年9月19日
18.41
2011年9月21日
07:15
$find *.txt -exec head -1 {} \;
9.16.11 09:20
9.19.11 18.41
9.21.11 07:15

答え1

コマンド置換はIFSに従って出力をトークン化します。特に、この場合は空間的に分割されます。解析されていない出力find。代わりに、以下を実行してください。

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

Wooledge Wikiにもこのトピックに関する良い情報があります。ここ

答え2

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

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

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

関連情報