0

我在 bash 中有以下字符串

str1="any string"
str2="any"

我想检查是否str2str1

我可以这样做:

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

有没有更有效的方法来做到这一点?

4

4 回答 4

4

您可以使用通配符扩展*

str1="any string"
str2="any"

if [[ "$str1" == *"$str2"* ]]
then
  echo "str2 found in str1"
fi

请注意,*扩展不适用于 single [ ]

于 2013-05-17T06:33:06.497 回答
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很慢,因为它会产生一个单独的进程。

于 2013-05-17T07:17:42.327 回答
1

您可以使用 bash 正则表达式匹配而不使用grep

if [[ $str1 =~ $str2 ]]; then
    ...
fi

请注意,正则表达式模式不需要任何周围的斜杠或引号。如果要使用 glob 模式匹配,只需使用==而不是=~as 运算符。

一些例子可以在这里找到。

于 2013-05-17T06:31:29.600 回答
0
if echo $str1 | grep -q $str2    #any command 
   then
   .....
fi
于 2013-05-17T06:50:52.697 回答