【发布时间】:2014-07-24 09:21:40
【问题描述】:
运行这些命令会得到预期的结果
$ bash --version
GNU bash, version 4.1.11(2)-release
$ foo=(111 222 333)
$ IFS=, cat <<< "${foo[*]}"
111,222,333
然而,在 Bash 4.2 中,IFS 值被忽略了
$ bash --version
GNU bash, version 4.2.0(1)-release
$ foo=(111 222 333)
$ IFS=, cat <<< "${foo[*]}"
111 222 333
造成这种差异的原因是什么?
我在这里找到了答案
http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00065.html
看起来这一直是个错误。根据切特的说法,
重定向不应该访问临时环境
(在这种情况下为IFS)
【问题讨论】:
-
@fedorqui spooky,我在
GNU bash, version 4.2.45(2)-release (x86_64-slackware-linux-gnu)上,可以重现 OP 的行为 -
转载
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)。输出为111 222 333 -
对于那些感兴趣的人,这是 bash 4.2 的更新日志:github.com/sunny256/bash/blob/master/CWRU/changelog 一定有一些解释,因为它是从 4.1 到 4.2 时发生的变化。
-
这也可能与 stackoverflow.com/q/20144593/1126841 松散相关(因为对这里的字符串和 IFS 的适当支持似乎是一个持续的过程)。