西西河

主题:【求助】bash中如何判断一个字符串存在于一个list中 -- 瓦斯

共:💬8 🌺9 新:
全看树展主题 · 分页
家园 【求助】bash中如何判断一个字符串存在于一个list中

数组myList已经建好,要判断一个字符变量myWord是否存在于这个数组中,在一些语言中,可以写类似这样的判断句:

if myWord in myList then

请问,在bash中应该如何写呢?

必有花谢。

关键词(Tags): #bash
家园 enumerate?

# define array

# name server names FQDN

NAMESERVERS=("ns1.nixcraft.net." "ns2.nixcraft.net." "ns3.nixcraft.net.")

# get length of an array

tLen=${#NAMESERVERS[@]}

# use for loop read all nameservers

for (( i=0; i<${tLen}; i++ ));

do

echo ${NAMESERVERS[$i]}

外链出处

家园 也可以这样

if [[ "${myList[@]#myWord}" != "${myList[@]}" ]]

then

echo "myWord is appeared in the myList!"

echo "myWord might be a sub-string of the element in myList also!"

fi

关键词(Tags): #编程
家园 这个思路不错,讨论一下能否用grep加速?

我一开始也在试用枚举的方法逐一比较数组中的每个元素,这样明显很慢,且代码很长。

你这个简短的方法却很漂亮,思路比较高,但是在数据多的时候仍然有点慢。

我在另外一种尝试中,感觉到grep的速度很快。我刚才用试用这样的命令 echo ${myList[*]} | grep $myWord,可以判断单词是否存在字典中,可是我还不会写这个if语句,你能否给指正一下?

我想写成这样子:

if [ echo ${myList[*]} | grep $myWord ]

then

echo "myWord is appeared in the myList!"

echo "myWord might be a sub-string of the element in myList also!"

fi

但是if语句明显需要修改,我是照搬别的语言的经验,可是拿到bash来需要转变一下,才能判断grep是否有结果返回。

家园 try this

if [ `echo ${myList[*]} | grep myWord` != "" ]

then

echo "xxxx"

fi

家园 用grep就是字符串的匹配了

白开水同学已经给了解法了

不过要提醒你的是对于myList的元素内容中有空格的情况需要特别注意。这个方法就会有问题。

另外如果用grep可以直接判断 $? 也就是说grep命令的返回值!

echo ${myList[@]} | grep $myWord >/dev/null

if [ $? -eq 0 ]

then

echo "find it"

fi

关键词(Tags): #编程
家园 推荐Bash编程的葵花宝典

Advanced Bash Scripting Guide 堪称 Bash 编程的葵花宝典,绝对骨灰级。

可以打印一本,没事儿的时候当小说看~

家园 哈哈,我手里拿着的是中文版的

多谢!

全看树展主题 · 分页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河