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内でのみフィールド拡張が行われるというルールをどこで見つけることができますか?
IFS
bash forループが最初に設定した値を尊重しないようです。私が何かを間違って理解したのでしょうか?
ベストアンサー1
フィールド分割リテラル文字列ではなく二重引用符で囲まれていないパラメータ拡張、コマンド置換、および算術拡張の結果にのみ適用されます。
を使用すると、次$myvar
の効果を得ることができますglob(split(1,2,3))
。split(1,2,3)
,
IFS
1
2
3
glob(1 2 3)
1
2
3
リテラル文字列は1,2,3
このプロセスの影響を受けず、単に変更されずに返されます。