আমি বলতে চাই যে $stringএকটি গ্লোব প্যাটার্নের সাথে কোনও স্ট্রিং মিলছে কিনা $pattern। $stringবিদ্যমান ফাইলের নাম বা নাও থাকতে পারে। কিভাবে আমি এটি করতে পারব?
আমার ইনপুট স্ট্রিংগুলির জন্য নিম্নলিখিত ফর্ম্যাটগুলি ধরে নিন:
string="/foo/bar"
pattern1="/foo/*"
pattern2="/foo/{bar,baz}"
আমি একটি ব্যাশ বাগ্ধারা নির্ধারণ করে যে যদি এটি চাই $stringদ্বারা মেলানো হবে $pattern1, $pattern2, বা অন্য কোন অবাধ উল্লিখিত glob প্যাটার্ন। আমি এখন পর্যন্ত যা চেষ্টা করেছি তা এখানে:
[[ "$string" = $pattern ]]এটি প্রায় কাজ করে, ব্যতীত
$patternস্ট্রিং প্যাটার্ন হিসাবে ব্যাখ্যা করা হয় এবং গ্লোব প্যাটার্ন হিসাবে নয়।[ "$string" = $pattern ]এই পদ্ধতির সাথে সমস্যাটি
$patternহ'ল প্রসারিত হয় এবং তারপরে$stringএবং এর প্রসারণের মধ্যে স্ট্রিং তুলনা করা হয়$pattern।[[ "$(find $pattern -print0 -maxdepth 0 2>/dev/null)" =~ "$string" ]]এটি কাজ করে, তবে কেবলমাত্র যদি
$stringএমন কোনও ফাইল থাকে যা বিদ্যমান থাকে।[[ $string =~ $pattern ]]এটি কাজ করে না কারণ
=~অপারেটর$patternএকটি গ্লোব বা ওয়াইল্ডকার্ড প্যাটার্ন নয়, বর্ধিত নিয়মিত অভিব্যক্তি হিসাবে ব্যাখ্যা করার কারণ ঘটায় ।
ls /foo/* এখন আপনি একটি
foo/{bar,baz}আসলে একটি ব্রেস এক্সপেনশন (প্যারামিটার এক্সপেনশন নয়) যখন পথের foo/*নাম সম্প্রসারণ। $stringপ্যারামিটার সম্প্রসারণ। এগুলি বিভিন্ন সময়ে এবং বিভিন্ন প্রক্রিয়া দ্বারা সম্পন্ন হয়।
caseবিবৃতিটি ব্যাশ ম্যানুয়াল অনুসারে পাথনাম এক্সপেনশন ("গ্লোব্বিং") সম্পাদন করে।
{bar,baz}কোনও নিদর্শন নয়। এটি প্যারামিটার সম্প্রসারণ। এর মধ্যে সূক্ষ্ম তবে সমালোচনামূলক পার্থক্যটি{bar,baz}খুব তাড়াতাড়ি একাধিক যুক্তিতে প্রসারিত হয়barএবংbaz।