我正在使用此代码检查一个 $var 是否存在于数组中:
if echo ${myArr[@]} | grep -qw $myVar; then echo "Var exists on array" fi
我如何将多个 $vars 合并到我的支票中?类似 grep -qw $var1,$var2; 然后...菲
先感谢您。
我正在使用此代码检查一个 $var 是否存在于数组中:
if echo ${myArr[@]} | grep -qw $myVar; then echo "Var exists on array" fi
我如何将多个 $vars 合并到我的支票中?类似 grep -qw $var1,$var2; 然后...菲
先感谢您。
if echo ${myArr[@]} | grep -qw -e "$myVar" -e "$otherVar"
then
echo "Var exists on array"
fi
从手册页:
-e PATTERN, --regexp=PATTERN 使用 PATTERN 作为模式。这可用于指定多个搜索模式,或保护以连字符 (-) 开头的模式。(-e 由 POSIX 指定。)
但是如果你想使用这样的数组,你不妨使用 bash 内置的关联数组。
实现和逻辑:
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
实际上你不需要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
一些二次的,但知道空间:
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"