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
, zsh
ve ksh93
ayrı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
. True
Dosya adı $file
en 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).