file="JetConst_reco_allconst_4j2t.png"
testseq="gen"
case "$file" in
*_"$testseq"_*) echo 'True' ;;
*) echo 'False'
esac
Kullanımı case ... esac, desen eşleştirmesini taşınabilir bir şekilde gerçekleştirmenin en basit yollarından biridir. Farklı dillerde bir "switch" ifadesi olarak çalışıyor ( bash, zshve ksh93ayrıca yapmanızı sağlar sonbahar-yoluyla çeşitli uyumsuz yollarla). Kullanılan desenler, standart dosya adı globbing desenleridir.
Sahip olduğunuz sorun, _değişken isminde geçerli bir karakter olması gerçeğinden kaynaklanıyor . Böylece kabuk, *_$testseq_*" *_değişken $testseq_ve ardından " değerini izleyecektir *. Değişken $testseq_tanımsız, bu nedenle boş bir dizgeye genişletilecek ve sonunda sahip olduğunuz değerle *_*eşleşen açık bir şekilde bulunacaktır $file. TrueDosya adı $fileen az bir alt çizgi içerdiği sürece elde edersiniz .
Düzgün değişkenin, kullanım adını sınırlandırmak için "..."genişleme etrafında: *_"$testseq"_*. Bu, değişkenin değerini bir dizge olarak kullanır. Değişkenin değerini desen olarak kullanmak ister misiniz , *_${testseq}_*yerine kullanın.
Diğer bir hızlı düzeltme, alt çizgi değerine aşağıdakileri eklemektir $testseq:
testseq="_gen_"
ve sonra sadece *"$testseq"*desen olarak kullanın (string karşılaştırması için).