什么可以改变bash中的命令替换行为?

时间:2013-05-23 16:59:50

标签: bash

我的一个bash shell给了我不同于其他人的行为。我不知道改变了什么设置,但请查看:

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”循环没有在字边界上分割,它将整个事物视为单个项目。同样,如果我使用$(ls),它会将整个大型多线程视为单个项目,并在第一行前面打印“foo”。

在两台主机上我正在运行bash。在主机spf上的其他bash shell中,它也可以正常工作(在单词边界上拆分)。有什么可以改变的?两者都运行相同版本的bash(“4.2.25(1)-release(x86_64-pc-linux-gnu)”)。字符是相同的,因为我两次用同一来源的鼠标复制粘贴for循环命令行。

谢谢!

1 个答案:

答案 0 :(得分: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