主题:【求助】bash中如何判断一个字符串存在于一个list中 -- 瓦斯
数组myList已经建好,要判断一个字符变量myWord是否存在于这个数组中,在一些语言中,可以写类似这样的判断句:
if myWord in myList then
请问,在bash中应该如何写呢?
必有花谢。
# 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
我一开始也在试用枚举的方法逐一比较数组中的每个元素,这样明显很慢,且代码很长。
你这个简短的方法却很漂亮,思路比较高,但是在数据多的时候仍然有点慢。
我在另外一种尝试中,感觉到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是否有结果返回。
if [ `echo ${myList[*]} | grep myWord` != "" ]
then
echo "xxxx"
fi
白开水同学已经给了解法了
不过要提醒你的是对于myList的元素内容中有空格的情况需要特别注意。这个方法就会有问题。
另外如果用grep可以直接判断 $? 也就是说grep命令的返回值!
if [ $? -eq 0 ]
then
echo "find it"
fi
Advanced Bash Scripting Guide 堪称 Bash 编程的葵花宝典,绝对骨灰级。
可以打印一本,没事儿的时候当小说看~
多谢!