我怎样才能删除" hole"在数组的索引?

时间:2017-04-02 22:06:58

标签: arrays bash

对不起,但我不知道拼写这个的正确方法。我希望这个例子可以解释我的问题:

$ array[1]=john
$ array[2]=smith
$ array[4]=jane
$ array[5]=doe
$ echo ${array[@]}
john smith jane doe
$ echo ${array[3]}

$

我想要一些方法删除"洞"在array的第3位,以便:

  • jane将移至第3位。
  • doe将移至第4位。
  • 位置5的值将变为空(未设置)。
  • 数组长度(本例中为4)不会更改。

是否需要通过数组编程任何循环来获取它,或者有一些更简单的方法?

进一步的数据:

  • 假设 Bash 为shell。

1 个答案:

答案 0 :(得分:5)

只需使用元素创建一个新数组:

$ array=([1]=john smith [4]=jane doe)
$ declare -p array
declare -a array='([1]="john" [2]="smith" [4]="jane" [5]="doe")'
$ array=("${array[@]}")
$ declare -p array
declare -a array='([0]="john" [1]="smith" [2]="jane" [3]="doe")'

请注意,这从0开始计算,而不是1.如果您确实需要基于1的数组,请将虚拟元素添加到新数组中,然后将其删除。

$ array=(foo "${array[@]}")
$ unset 'array[0]'
$ declare -p array
declare -a array='([1]="john" [2]="smith" [3]="jane" [4]="doe")'