bash 如何删除数组中的元素

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

bash 如何删除数组中的元素

#1

帖子 自由建客 » 2012-03-11 14:18

我知道 lst 中有个值为 "hello" 的元素,下标不清楚,我要删除它!
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: bash 如何删除数组中的元素

#2

帖子 枫叶饭团 » 2012-03-11 14:26

想到个非常sb的办法,列遍所有元素和hello进行比较。。。等于的时候附'' 算叫删除吧
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: bash 如何删除数组中的元素

#3

帖子 自由建客 » 2012-03-11 14:33

for 循环只能取值,取不到下标!
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: bash 如何删除数组中的元素

#4

帖子 自由建客 » 2012-03-11 14:34

先规整数组
lst=("${lst[@]}")
再用 while 循环遍历,取得下标
然后删除。

好蛋疼!
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: bash 如何删除数组中的元素

#5

帖子 fnan » 2012-03-11 19:24

for i in ${!arry[@]};do [[ ${arry[$i]} == "hello" ]] && unset arry[$i];done
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: bash 如何删除数组中的元素

#6

帖子 自由建客 » 2012-03-11 20:18

fnan,

代码: 全选

>0< ~$ lst=([0]=em0 [3]=em3 [5]=hello [100]=em100)

>0< ~$ echo "${lst[@]}"
em0 em3 hello em100

>0< ~$ for i in ${!lst[@]}; do [[ ${lst[$i]} == "hello" ]] && unset lst[$i]; done

>1< ~$ echo "${lst[@]}"
em0 em3 em100

>0< ~$
效果能达道。请问这个返回 1 是怎么回事?
头像
Think1st
帖子: 45
注册时间: 2012-02-07 23:08

Re: bash 如何删除数组中的元素

#7

帖子 Think1st » 2012-03-12 11:07

自由建客 写了:我知道 lst 中有个值为 "hello" 的元素,下标不清楚,我要删除它!
删除Array中值为hello的元素。

代码: 全选

declare -a ARRAY=('how are you' 'hello' 'cmj' 'very ok');
echo ${ARRAY[@]}

ARRAY=( ${ARRAY[@]/hello/} )
echo ${ARRAY[@]}
在这里,问题比答案更抢手。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: bash 如何删除数组中的元素

#8

帖子 自由建客 » 2012-03-12 16:30

Think1st, 你这段 bug 太多了 :em09
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: bash 如何删除数组中的元素

#9

帖子 fnan » 2012-03-12 19:11

自由建客 写了:fnan,

代码: 全选

>0< ~$ lst=([0]=em0 [3]=em3 [5]=hello [100]=em100)

>0< ~$ echo "${lst[@]}"
em0 em3 hello em100

>0< ~$ for i in ${!lst[@]}; do [[ ${lst[$i]} == "hello" ]] && unset lst[$i]; done

>1< ~$ echo "${lst[@]}"
em0 em3 em100

>0< ~$
效果能达道。请问这个返回 1 是怎么回事?
#印象中似乎不会问这种问题:
试试: for i in ${!lst[@]}; do [[ ${lst[$i]} == "hello" ]] && unset lst[$i] && break; done
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
Think1st
帖子: 45
注册时间: 2012-02-07 23:08

Re: bash 如何删除数组中的元素

#10

帖子 Think1st » 2012-03-15 14:56

自由建客 写了:Think1st, 你这段 bug 太多了 :em09

代码: 全选

$ declare -a ARRAY=('how are you' 'hello' 'cmj' 'very ok');
$ echo ${ARRAY[@]}
how are you hello cmj very ok
$ ARRAY=( ${ARRAY[@]/hello/} )
$ echo ${ARRAY[@]}
how are you cmj very ok
木有问题哦。我的bash 是4.1.5,这个特性是bash4以上的有木有?
在这里,问题比答案更抢手。
回复