西西河

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

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

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

    if myWord in myList then

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

    必有花谢。

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

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

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

    • 家园 也可以这样

      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是否有结果返回。

    • 家园 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]}

      外链出处

分页树展主题 · 全看


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

Copyright © cchere 西西河