我GNU bash, version 4.3.42(1)-release
正在做一些测试来回答一个问题。这个想法是将一个 - 分隔的:
字符串及其每个元素拆分为一个数组。
为此,我尝试在命令范围内设置IFS
to :
,以便拆分是自动的并且IFS
保持不变:
$ myvar="a:b:c"
$ IFS=: d=($myvar)
$ printf "%s\n" ${d[@]}
a
b
c
显然IFS
保持不变:
$回声$IFS # 空的
BASH 参考说:
如果未设置 IFS,则参数以空格分隔。如果 IFS 为空,则将参数连接起来而不插入分隔符。
但是,然后我注意到IFS
有点坏了,所以echo $myvar
返回a b c
而不是a:b:c
.
取消设置值可以解决它:
$ unset IFS
$ echo $myvar
a:b:c
但我想知道:是什么原因造成的?不只是在正在执行的命令范围内IFS=: command
改变吗?IFS
我在为单个语句设置 IFS 中看到这确实有效:
$ IFS=: eval 'd=($myvar)'
$ echo $myvar
a:b:c
但我不明白为什么它会这样做和IFS=: d=($myvar)
不这样做。