Shell-Script

測試字元串是否包含子字元串

  • February 26, 2020

我有程式碼

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

現在輸出為“真”。怎麼會這樣?如何解決問題?

您需要$testseq使用以下方法之一對變數進行插值:

  • $file == *_"$testseq"_*(此處$testseq視為固定字元串)
  • $file == *_${testseq}_*(這裡$testseq被認為是一種模式)。

或者_緊隨其後的變數名將被視為變數名的一部分(它是變數名中的有效字元)。

使用=~運算符進行正則表達式比較:

#!/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]例如),則觸發“匹配”的機會更高。

參考

引用自:https://unix.stackexchange.com/questions/370889