5

我的一个 bash shell 给了我与其他 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-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 回答