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"
オールドスクール (ボーンシェルスタイル):
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
は遅くなります。
if echo $str1 | grep -q $str2 #any command
then
.....
fi