首先让我清楚地说明我的问题:
Ex:让我们假装这是我的数组,(元素无关紧要,因为我的实际代码不同):
array=(jim 0 26 chris billy 78 hello foo bar)
现在说我要删除以下元素:
chris 78 hello
所以我在循环遍历数组时做了unset array[$i]
。
这会正确地删除元素,但是,我最终得到一个如下所示的数组:
array=(jim 0 26 '' billy '' '' foo bar)
我需要它看起来像这样:
array=(jim 0 26 billy foo bar)
其中 jim 位于索引 0 , 0 @ 1 , 26 @ 2 等。< / p>
如何删除数组中的元素并移动其他元素,以便数组中没有空/空格?
谢谢!
答案 0 :(得分:23)
试试这个:
$ array=( "one two" "three four" "five six" )
$ unset array[1]
$ array=( "${array[@]}" )
$ echo ${array[0]}
one two
$ echo ${array[1]}
five six
Shell数组实际上不是作为可以添加和删除项目的数据结构(它们主要用于为诸如
之类的情况提供第二级引用arr=( "one two" "three four" )
somecommand "${arr[@]}"
为somecommand
提供两个而不是四个参数。但这应该适用于大多数情况。
答案 1 :(得分:3)
请参阅http://www.thegeekstuff.com/2010/06/bash-array-tutorial
...
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
pos=3
Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))})
这使得星球附近的阵列收缩,这是原始海报想要的。
答案 2 :(得分:0)
试试这个:
user@pc:~$ array=(jim 0 26 chris billy 78 hello foo bar)
user@pc:~$ for itm2rm in chris 78 hello; do array=(\`echo ${array[@]} | sed "s/\<${itm2rm}\>//g"\`); done ; echo ${array[@]}
jim 0 26 billy foo bar
答案 3 :(得分:0)
这篇文章已经过修改,并作为更深入的教程how to remove an array element correctly in a for loop
转移到自己的帖子中