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