0

bashに次の文字列があります

str1="any string"
str2="any"

str2の部分文字列かどうかを確認したいstr1

私はこのようにそれを行うことができます:

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"

オールドスクール (ボーンシェルスタイル):

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 に答える
0
if echo $str1 | grep -q $str2    #any command 
   then
   .....
fi
于 2013-05-17T06:50:52.697 に答える