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"*
প্যাটার্ন হিসাবে ব্যবহার করুন (স্ট্রিং তুলনার জন্য)।