設定により、文字列が、およびの3つの単語に分割されると仮定IFS='X'
します。bash
fooXbarXbaz
foo
bar
baz
for
ただし、コマンド置換によって文字列がループに提供されている場合にのみ機能します$(echo fooXbarXbaz)
。
$ IFS='X'; for x in fooXbarXbaz; do echo Y${x}Z; done
Yfoo bar bazZ
$ IFS='X'; for x in $(echo fooXbarXbaz); do echo Y${x}Z; done
YfooZ
YbarZ
YbazZ
最初の例のコマンドは3つのfooXbarXbaz
単語に分割されませんが、2番目の例では成功する理由を誰かが説明できますか?
ベストアンサー1
$IFS
引用符のない拡張噴射にのみ使用されます。には拡張子がありませんfor x in fooXbarXbaz
。ただし、引用符のない拡張があります。これは、および3つの引数で呼び出されるというecho Y${x}Z
意味です。ユーティリティは、各引数の間にスペースを入れて印刷するので。echo
Yfoo
bar
bazZ
echo
Yfoo bar bazZ
2番目の例では、文字列は拡張であるコマンド置換の出力であるため、文字列はループ用に分割されています。
この変数はユーティリティへの入力をIFS
分割するためにも使用されます。read