Shell-Script
測試字元串是否包含子字元串
我有程式碼
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]
例如),則觸發“匹配”的機會更高。參考: