file="JetConst_reco_allconst_4j2t.png"
testseq="gen"
case "$file" in
*_"$testseq"_*) echo 'True' ;;
*) echo 'False'
esac
case ... esacপোর্টেবল উপায়ে প্যাটার্ন ম্যাচটি সম্পাদন করার অন্যতম সহজ উপায় ব্যবহার Using এটি অন্যান্য ভাষায় একটি "সুইচ" বিবৃতি হিসাবে কাজ করে ( bash, zsh, এবং ksh93এছাড়াও আপনাকে যা করতে পারবেন পতনের মাধ্যমে বিভিন্ন বেমানান উপায়ে)। ব্যবহৃত নিদর্শনগুলি হ'ল স্ট্যান্ডার্ড ফাইলের নাম গ্লোব্বিং নিদর্শন।
আপনার যে সমস্যাটি হচ্ছে তা হ'ল এটি _একটি ভেরিয়েবল নামের বৈধ চরিত্রের কারণে । শেলটি এইভাবে *_$testseq_*" *_ভেরিয়েবল $testseq_এবং একটি এর মান অনুসারে " হিসাবে দেখবে *। ভেরিয়েবল $testseq_অপরিজ্ঞাত, তাই এটি একটি ফাঁকা স্ট্রিংয়ে প্রসারিত হবে এবং আপনি শেষ করবেন *_*যা স্পষ্টতই আপনার সাথে থাকা $fileমানটির সাথে মেলে । Trueফাইলের নামটিতে যতক্ষণ না $fileঅন্তত একটি আন্ডারস্কোর থাকে ততক্ষণ আপনি প্রত্যাশা করতে পারেন ।
সঠিকভাবে পরিবর্তনশীল, ব্যবহারের নাম সীমানা করার "..."সম্প্রসারণ প্রায়: *_"$testseq"_*। এটি স্ট্রিং হিসাবে ভেরিয়েবলের মান ব্যবহার করবে। আপনি কি ভেরিয়েবলের মানটি একটি প্যাটার্ন হিসাবে ব্যবহার করতে চান , *_${testseq}_*পরিবর্তে ব্যবহার করুন।
আর একটি দ্রুত ফিক্স হ'ল আন্ডারস্কোরগুলি এর মানতে অন্তর্ভুক্ত করা $testseq:
testseq="_gen_"
এবং তারপরে কেবল *"$testseq"*প্যাটার্ন হিসাবে ব্যবহার করুন (স্ট্রিং তুলনার জন্য)।