使用grep检查数组中是否存在多个var

时间:2013-03-17 10:48:44

标签: arrays bash grep conditional-statements

我正在使用此代码检查数组中是否存在一个$ var:

 if echo ${myArr[@]} | grep -qw $myVar; then echo "Var exists on array" fi

我如何将多个$ vars合并到我的支票上?像grep -qw $ var1,$ var2;然后...... fi

先谢谢你。

3 个答案:

答案 0 :(得分:1)

if echo ${myArr[@]} | grep -qw -e "$myVar" -e "$otherVar"
then 
  echo "Var exists on array"
fi

从手册页:

  

-e PATTERN, - regexp = PATTERN                使用PATTERN作为模式。   这可用于指定多个搜索模式,或用于保护以连字符( - )开头的模式。 (-e由POSIX指定。)

但是如果你想使用这样的数组,你也可以使用内置的bash associative arrays

实施和逻辑:

myVar1=home1
myVar2=home2

myArr[0]=home1
myArr[1]=home2
if echo ${myArr[@]} | grep -qw -e "$myVar1.*$myVar2" -e "$myVar2.*$myVar1"
then 
          echo "Var exists on array"
fi

# using associative arrays

declare -A assoc
assoc[home1]=1
assoc[home2]=1

if [[ ${assoc[$myVar1]} && ${assoc[$myVar2]} ]]; then
  echo "Var exists on array"
fi

答案 1 :(得分:1)

实际上你不需要grep,Bash完全有能力进行扩展正则表达式(Bash 3.0或更高版本)。

pattern="$var1|$var2|$var3"

for element in "${myArr[@]}"
do
    if [[ $element =~ $pattern ]]
    then
        echo "$pattern exists in array"
        break
    fi
done

答案 2 :(得分:0)

一些二次方,但知道空格:

myArr=(aa "bb c" ddd)

has_values(){ 
  for e in "${myArr[@]}" ; do
    for f ; do
      if [ "$e" = "$f" ]; then return 0 ; fi
    done
  done 
  return 1
}

if has_values "ee" "bb  c" ; then echo yes ; else echo "no" ; fi

此示例将打印no,因为"bb c" != "bb c"