数组+ =值在ksh中不起作用?

时间:2013-03-22 06:04:38

标签: ksh

我在某处读到ksh的数组支持+=来附加新元素,但我尝试了它并且它不起作用:

[ksh] # arr=(a b c d)
[ksh] # arr+=e
[ksh] # echo ${arr[*]}
ae b c d
[ksh] #

为什么arr[0]变为ae

2 个答案:

答案 0 :(得分:6)

要向数组添加元素,它应该是这样的:

arr+=(e)

通过执行arr+=e,它将添加到数组的第一个元素。因为只有名称arr指向数组本身的第一个元素:

$ arr=(a b c d)
$ echo ${arr[0]}
a
$ echo $arr
a

答案 1 :(得分:2)

这是arr+=(e)。任何未指定索引的简单赋值始终引用第0个元素。

请注意,这是一个微不足道的案例,事情会变得更加复杂。 +=根据上下文对简单赋值和复合赋值都有不同的行为,bash,ksh93和zsh之间也有所不同,因此很容易混淆。

http://wiki.bash-hackers.org/syntax/arrays#storing_values