我正在使用此代码检查数组中是否存在一个$ var:
if echo ${myArr[@]} | grep -qw $myVar; then echo "Var exists on array" fi
我如何将多个$ vars合并到我的支票上?像grep -qw $ var1,$ var2;然后...... fi
先谢谢你。
答案 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"