设置数组的默认值

时间:2018-01-31 13:45:27

标签: arrays bash shell

这是理解幕后情况的理论问题。

如果我这样做:

q=( 11 22 33 )
q="${q-()}"
declare -p q

它输出预期的:

declare -a p=([0]="11" [1]="22" [2]="33")

但如果我跑:

q=( 11 22 33 )
q="${q[@]-()}"
declare -p q

然后我明白了:

declare -a p=([0]="11 22 33" [1]="22" [2]="33")

我明白哪种方式是正确的,但我无法解释为什么后者产生它的结果。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

分配给q,当它已经设置了数组属性时,相当于分配给q[0]。也就是说,你会得到与

相同的结果
q[0]="${q[@]-()}"

在您的第一个代码中,由于同样的原因,${q-()}也会扩展为${q[0]-()},并且该值会重新分配回q[0],从而导致明显的无操作。 (在每种情况下,${...-()}都与${...}相同,因为您没有处理任何未设置的变量。)