我在bash中有以下字符串
str1="any string"
str2="any"
我想检查str2
是str1
我可以这样做:
c=`echo $str1 | grep $str2`
if [ $c != "" ]; then
...
fi
有更有效的方法吗?
答案 0 :(得分:4)
您可以使用外卡展开*
。
str1="any string"
str2="any"
if [[ "$str1" == *"$str2"* ]]
then
echo "str2 found in str1"
fi
请注意,*
展开不适用于单[ ]
。
答案 1 :(得分:3)
str1="any string"
str2="any"
旧学校(Bourne shell风格):
case "$str1" in *$str2*)
echo found it
esac
新学校(如发言人所示),但要注意右边的字符串将被视为正则表达式:
if [[ $str1 =~ $str2 ]] ; then
echo found it
fi
但即使你没有完全期待它,这也会奏效:
str2='.*[trs].*'
if [[ $str1 =~ $str2 ]] ; then
echo found it
fi
使用grep
的速度很慢,因为它会产生一个单独的进程。
答案 2 :(得分:1)
您可以在不使用grep
的情况下使用bash regexp匹配:
if [[ $str1 =~ $str2 ]]; then
...
fi
请注意,regexp模式不需要任何周围的斜杠或引号。如果您想使用glob模式匹配,只需使用==
而不是=~
作为运算符。
可以找到一些示例here。
答案 3 :(得分:0)
if echo $str1 | grep -q $str2 #any command
then
.....
fi