5

私の bash シェルの 1 つが、他のシェルとは異なる動作をしています。どの設定が変更されたのかわかりませんが、これを確認してください。

hersh@huey$ for f in $(echo a b c); do echo foo $f; done
foo a
foo b
foo c
hersh@huey$ logout
Connection to huey closed.
hersh@spf$ for f in $(echo a b c); do echo foo $f; done
foo a b c

ホストhueyでは、「for」ループが期待どおりに機能しました。単語境界で分割されました。ホスト spf では、"for" ループが単語の境界で分割されず、全体が 1 つの項目として扱われていました。同様に、$(ls) を使用すると、大きな複数行全体が 1 つの項目として扱われ、最初の行の直前に「foo」が出力されます。

両方のホストで bash を実行しています。ホスト spf 上の他の bash シェルでも正常に動作します (単語境界で分割されます)。何がそれを変えることができますか?どちらも同じバージョンの bash (「4.2.25(1)-release (x86_64-pc-linux-gnu)」) を実行しています。同じソースから for-loop コマンド ラインをマウスでコピー アンド ペーストしたため、文字は同じです。

ありがとう!

4

1 に答える 1

4

$IFS を確認してください

mogul@linuxine:~$ for f in $(echo a b c); do echo foo $f; done
foo a
foo b
foo c
mogul@linuxine:~$ export IFS=SOMETHINGBAD
mogul@linuxine:~$ for f in $(echo a b c); do echo foo $f; done
foo a b c
mogul@linuxine:~$ 

ここのマニュアルを見てくださいbash Word Splitting

于 2013-05-23T17:06:15.973 に答える