我在 bash 中有以下字符串
str1="any string"
str2="any"
我想检查是否str2
是str1
我可以这样做:
c=`echo $str1 | grep $str2`
if [ $c != "" ]; then
...
fi
有没有更有效的方法来做到这一点?
您可以使用通配符扩展*
。
str1="any string"
str2="any"
if [[ "$str1" == *"$str2"* ]]
then
echo "str2 found in str1"
fi
请注意,*
扩展不适用于 single [ ]
。
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
很慢,因为它会产生一个单独的进程。
您可以使用 bash 正则表达式匹配而不使用grep
:
if [[ $str1 =~ $str2 ]]; then
...
fi
请注意,正则表达式模式不需要任何周围的斜杠或引号。如果要使用 glob 模式匹配,只需使用==
而不是=~
as 运算符。
一些例子可以在这里找到。
if echo $str1 | grep -q $str2 #any command
then
.....
fi