file="JetConst_reco_allconst_4j2t.png"
testseq="gen"
case "$file" in
*_"$testseq"_*) echo 'True' ;;
*) echo 'False'
esac
का उपयोग करते हुए case ... esac
एक पोर्टेबल रास्ते में एक पैटर्न मैच प्रदर्शन करने के लिए सरल तरीके से एक है। यह अन्य भाषाओं में एक "स्विच" बयान के रूप में काम करता है ( bash
, zsh
, और ksh93
भी आप करने की अनुमति देता गिरावट के माध्यम से विभिन्न असंगत तरीके में)। उपयोग किए जाने वाले पैटर्न मानक फ़ाइल नाम ग्लोबिंग पैटर्न हैं।
समस्या जो आप कर रहे हैं वह इस तथ्य के कारण है कि _
एक चर नाम में एक मान्य वर्ण है। शेल इस प्रकार *_$testseq_*
" *_
चर के मूल्य के बाद $testseq_
और एक *
" के रूप में देखेंगे । चर $testseq_
अपरिभाषित है, इसलिए इसे एक रिक्त स्ट्रिंग में विस्तारित किया जाएगा, और आप के साथ समाप्त होता है *_*
, जो स्पष्ट रूप से $file
आपके पास मूल्य से मेल खाता है। आप कम से कम एक अंडरस्कोर में True
फ़ाइल नाम के रूप में लंबे समय तक प्राप्त करने की उम्मीद कर सकते हैं $file
।
चर के नाम को ठीक से परिसीमन करने के लिए, "..."
विस्तार के चारों ओर उपयोग करें *_"$testseq"_*
:। यह एक स्ट्रिंग के रूप में चर के मूल्य का उपयोग करेगा। क्या आप एक पैटर्न के रूप में चर के मूल्य का उपयोग करना चाहते हैं , *_${testseq}_*
इसके बजाय का उपयोग करें ।
एक और त्वरित फिक्स में $testseq
निम्न को शामिल करना है :
testseq="_gen_"
और फिर *"$testseq"*
पैटर्न (स्ट्रिंग तुलना के लिए) के रूप में उपयोग करें ।