考虑以下将内容从一个数组复制到另一个数组的机制:
$ array1=( [1]=a [2]=b [5]=c )
$ array2=( "${array1[@]}" )
其中一个已知的副作用是指数不会被保留,可以证明如下:
# note that indices have changed from 1/2/5 to 0/1/2
$ declare -p array1 array2
declare -a array1='([1]="a" [2]="b" [5]="c")'
declare -a array2='([0]="a" [1]="b" [2]="c")'
使用此语法或其效果与直接分配array2=( [1]=a [2]=b [5]=c )
的地方有任何其他副作用吗?
答案 0 :(得分:0)
您命名的差异 - 丢弃索引 - 是唯一有效的差异(丢弃性能影响,这取决于版本,难以衡量)。也就是说,至少还有一个问题出在这个问题上:有问题的语法无法复制关联数据和数字索引数组。
这种语法的简洁性,清晰度和安全性(与使用eval
等hackery相反)通常被认为是足以使其适用于保留索引不重要的情况下的一般用途。