【发布时间】:2013-03-22 06:04:38
【问题描述】:
我在某处读到 ksh 的数组支持 += 追加新元素,但我试过了,它不起作用:
[ksh] # arr=(a b c d)
[ksh] # arr+=e
[ksh] # echo ${arr[*]}
ae b c d
[ksh] #
为什么arr[0] 变成ae?
【问题讨论】:
标签: ksh
我在某处读到 ksh 的数组支持 += 追加新元素,但我试过了,它不起作用:
[ksh] # arr=(a b c d)
[ksh] # arr+=e
[ksh] # echo ${arr[*]}
ae b c d
[ksh] #
为什么arr[0] 变成ae?
【问题讨论】:
标签: ksh
要向数组中添加一个元素,应该是这样的:
arr+=(e)
通过 arr+=e ,它将添加到数组的第一个元素。这是因为只有名称 arr 指向数组本身的第一个元素:
$ arr=(a b c d)
$ echo ${arr[0]}
a
$ echo $arr
a
【讨论】:
它是arr+=(e)。任何未指定索引的简单赋值总是引用第零个元素。
请注意,这是一个微不足道的案例,事情可能会变得更加复杂。 += 对简单赋值和复合赋值的行为取决于上下文,并且在 bash、ksh93 和 zsh 之间也不同,因此很容易混淆。
【讨论】: