如何从数组中完全删除元素?

mun*_*ish 62 shell bash array shell-script

unset array[0]删除元素但仍然如果我这样做echo ${array[0]}我得到一个空值而且还有其他方法可以做到这一点但是如果数组的元素包含如下空格

array[0]='james young'
array[1]='mary'
array[2]='randy orton'
Run Code Online (Sandbox Code Playgroud)

但这些也无法完成工作

array=${array[@]:1} #removed the 1st element
Run Code Online (Sandbox Code Playgroud)

现在我希望新数组像

array[0]='mary'
array[1]='randy orton'
Run Code Online (Sandbox Code Playgroud)

分配后空格会引起麻烦,实际数组变得像替换一样。

array=(mary randy orton)
Run Code Online (Sandbox Code Playgroud)

man*_*ork 88

只需在赋值中使用数组语法并引用您的变量:

array=("${array[@]:1}") #removed the 1st element
Run Code Online (Sandbox Code Playgroud)

根据评论中的问题进行编辑。因为$@你可以像这样使用它:

set -- "${@:2}" #removed the 1st parameter
Run Code Online (Sandbox Code Playgroud)

  • 请注意,它不会删除 _1st element_,而是删除索引 0 的元素并重新分配索引。如果第一个元素在索引 12 上,它不会删除任何内容,但会重新分配索引,以便曾经在索引 12 上的元素现在在索引 0 上。在 OP 的情况下,这可能不是问题,但可能应该注意以后的参考。行为与 `zsh` 不同,它的数组与 ksh 或 bash 相比并不稀疏。 (8认同)
  • 嗨@StephaneChazelas。“索引”的单数是“**index**”。谢谢你的评论! (4认同)
  • @manatwork - 回复:您的编辑 - 为什么不使用 `shift`? (3认同)