从下面的arrayA
值开始。
arrayA=(‘valueA’ ‘valueB’ ‘valueC’)
*…Clever_One_line_Statement_goes_here…*
在…Clever_One_line_Statement之后,arrayA
具有值。...
arrayA=(‘’ ‘valueA’ ‘valueB’ ‘valueC’)
答案 0 :(得分:3)
您可以使用引号正确的参数扩展名:
$ arrayA=('valueA' 'valueB' 'valueC')
$ declare -p arrayA
declare -a arrayA=([0]="valueA" [1]="valueB" [2]="valueC")
$ arrayA=('' "${arrayA[@]}")
$ declare -p arrayA
declare -a arrayA=([0]="" [1]="valueA" [2]="valueB" [3]="valueC")
请注意,我已使用“普通”单引号(''
);您使用过的“智能”(‘’
)会按字面意义进行解释,这几乎肯定不是您想要的。
答案 1 :(得分:1)
如果您不关心性能,那么the answer by @BenjaminW就是很好的选择。另一方面,如果您要对同一阵列重复执行此操作并需要快速,请考虑使阵列稀疏,并保留大量未使用的索引,您可以填写这些索引以快速添加项目。开始:
# Use a larger offset than you'll ever need; here, starting at 10,000
arrayA=( [10000]='valueA' [10001]='valueB' [10002]='valueC' )
arrayIdx=0
# then, to add an empty string at the top of your array, use this one-liner:
arrayA[arrayIdx++]=''
答案 2 :(得分:0)
perl将此操作称为“ unshift”。要将其实现为bash函数(名称引用需要版本4.4 +)
$ unshift() { local -n ary=$1; shift; ary=("$@" "${ary[@]}"); }
$ x=(foo bar baz)
$ unshift x "first value" "second value" "third value"
$ declare -p x
declare -a x=([0]="first value" [1]="second value" [2]="third value" [3]="foo" [4]="bar" [5]="baz")
答案 3 :(得分:0)
另一种方式。
$: declare -a a=( 1 2 3 4 5 6 7 8 9 )
$: echo "${#a[@]}"
9
$: echo ${a[1]}
2
$: a=( '' "${a[@]}" )
$: echo "${#a[@]}"
10
$: echo ${a[1]}
1
$: unset a[0]
$: echo "${#a[@]}"
9
$: echo ${a[1]}
1
unset
会完全删除伪造的单元格0。
所以,简短版-
$: a=( '' "${a[@]}" )
$: unset a[0]
答案 4 :(得分:-3)
下面的一行让我知道了我需要的东西。
cellNameArray=('' ${cellNameArray[*]} )
本杰明W.真的很近。删除双引号并将“ @”替换为“ *”。
感谢本杰明的想法。