bash for ループの予期しないフィールド拡張動作

bash for ループの予期しないフィールド拡張動作

Linux/Unixでは、すべてのフィールド拡張ルールを調整するのが難しく、実験を行ってきました。以下は、私が期待したものと一致しない私の読み取りに基づいた例です。

~$ IFS=$', \t\n'
~$ for i in 1 2 3; do echo num:"$i"; done
num:1
num:2
num:3
~$ myvar=1,2,3
~$ for i in $myvar; do echo num:"$i"; done
num:1
num:2
num:3
~$ for i in 1,2,3; do echo num:"$i"; done
num:1,2,3

最終結果は私にはまったく予期せぬことでした。変数のループのbash内でのみフィールド拡張が行われるというルールをどこで見つけることができますか?

IFSbash forループが最初に設定した値を尊重しないようです。私が何かを間違って理解したのでしょうか?

ベストアンサー1

フィールド分割リテラル文字列ではなく二重引用符で囲まれていないパラメータ拡張、コマンド置換、および算術拡張の結果にのみ適用されます。

を使用すると、次$myvarの効果を得ることができますglob(split(1,2,3))split(1,2,3),IFS123glob(1 2 3)123

リテラル文字列は1,2,3このプロセスの影響を受けず、単に変更されずに返されます。

おすすめ記事