如何检查字符串是否是另一个字符串的子字符串?

时间:2013-05-17 06:27:12

标签: string shell

我在bash中有以下字符串

str1="any string"
str2="any"

我想检查str2str1

的子字符串

我可以这样做:

c=`echo $str1 | grep $str2`
if [ $c != "" ]; then
    ...
fi

有更有效的方法吗?

4 个答案:

答案 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