文字列に部分文字列が含まれているかどうかをテストする

文字列に部分文字列が含まれているかどうかをテストする

コードがあります

file="JetConst_reco_allconst_4j2t.png"
if [[ $file == *_gen_* ]];
then
    echo "True"
else
    echo "False"
fi

file「gen」が含まれているかどうかをテストします。出力は「偽」です。いいね!

問題は、「gen」を変数に置き換えるときですtestseq

file="JetConst_reco_allconst_4j2t.png"
testseq="gen"
if [[ $file == *_$testseq_* ]];
then
    echo "True"
else
    echo "False"
fi

これで出力は「True」です。どうやって?この問題をどのように解決しますか?

ベストアンサー1

演算子を使用した正規表現の比較=~:

#!/bin/bash
file="JetConst_reco_allconst_4j2t.png"
testseq="gen"
if [[ $file =~ $testseq ]];
then
    echo "True"
else
    echo "False"
fi

このようにしてコンテンツがあるかどうかを比較します$file$testseq

user@host:~$ ./string.sh
False

私が変更した場合testseq="Const"

user@host:~$ ./string.sh
True

しかし、食べることに注意してください$testseq。その文字列が何らかの方法で(たとえば)正規表現を表す場合、[0-9]「一致」がトリガーされる可能性が高くなります。

引用する:

おすすめ記事