サブシェルの for ループの IFS 設定

サブシェルの for ループの IFS 設定
IFS='\n'
for i in "$(IFS='\n' printf 'abc\nxyz\n123 456\n')"; do
    echo "????"
    echo "$i"
done

echo "output"
echo "${args[@]}"

次の出力:

????
abc
xyz
123 456
output

forループに各行を繰り返すにはどうすればよいですか?IFS='\n'コマンドがこのように実行されないのはなぜですか?

答え1

二重引用符は、「コマンドの置換」をパラメータにします。以下を使わずに試してみてください。

$ for i in $( printf 'abc\nxyz\n123 456\n'); do   echo "????";   echo "$i"; done
????
abc
????
xyz
????
123 456

また、IFS設定は「\」と「n」の2文字を含む文字列です。たとえばbash、試してみたいと思うかもしれません$'\n'

関連情報