bash
80 এর দশকের শেষদিকে ksh
csh / tcsh এর কিছু ইন্টারেক্টিভ বৈশিষ্ট্যগুলির আংশিক ক্লোন হিসাবে ডিজাইন করা হয়েছিল ।
গ্লোব্বিংয়ের উত্সগুলি সেই পূর্ববর্তী শেলগুলির মধ্যে এটির উপর ভিত্তি করে খুঁজে পাওয়া উচিত।
ksh
নিজেই বোর্ন শেলের একটি এক্সটেনশন। বোর্ন শেল নিজেই (১৯৯৯ সালে ইউনিক্স ভি in এ প্রথম প্রকাশিত হয়েছিল) স্ক্র্যাচ থেকে একটি পরিষ্কার বাস্তবায়ন ছিল, তবে এটি থম্পসন শেল (ভি 1 -> ভি 6 এর শেল) থেকে সম্পূর্ণরূপে চলে যায় নি এবং মাশে শেল থেকে বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করেছিল।
বিশেষত, কমান্ড আর্গুমেন্টগুলি এখনও ফাঁকা দ্বারা পৃথক করা |
হয়েছিল, এখন নতুন পাইপ অপারেটর ^
ছিল তবে এটি বিকল্প হিসাবে সমর্থিত ছিল (এবং আপনি কেন করেন [!a-z]
এবং না কেন তাও ব্যাখ্যা করে [^a-z]
), $1
এখনও কোনও স্ক্রিপ্টের প্রথম যুক্তি ছিল এবং ব্যাকস্ল্যাশ এখনও অব্যাহতি চরিত্র ছিল । তাই অনেকগুলি রিজেক্স এক্স অপারেটর ( ^\|$
) শেলের মধ্যে তাদের নিজস্ব একটি বিশেষ অর্থ রয়েছে।
থম্পসন শেল গ্লোব্বিংয়ের জন্য একটি বাহ্যিক ইউটিলিটিতে নির্ভর করে। যখন sh
unquoted পাওয়া *
, [
বা ?
কমান্ডে গুলি, এটা মাধ্যমে কমান্ড চালানো হবে glob
।
rm *.txt
গ্লোব চলমান শেষ হবে:
["glob", "rm", "*.txt"]
এবং গ্লোব rm
সেই প্যাটার্নের সাথে মেলে এমন ফাইলগুলির তালিকার সাথে চলবে ।
grep a.\*b *.txt
glob
হিসাবে চালানো হবে :
["glob", "grep", "a.\252b", "*.txt"]
*
উপরে যে চরিত্রে 8th বিট সেটিং প্রতিরোধ দ্বারা উদ্ধৃত হয়েছে glob
একটি ওয়াইল্ড কার্ড যেমন চিকিত্সা থেকে। glob
তারপরে কল করার আগে সেই বিটটি সরিয়ে ফেলবে grep
।
Regexps সঙ্গে সমতুল্য করতে, এটি হত:
regexp rm '\.txt$'
বা:
regexp rm '^[^.].*\.txt$'
ডট-ফাইল বাদ দিতে।
অপারেটরদের শেল বিশেষ অক্ষর হিসাবে দ্বিগুণ হওয়ার সাথে সাথে তাদের পালানোর প্রয়োজনীয়তা .
, ফাইল-নামগুলিতে সাধারণ একটি রিজএক্সএক্স অপারেটর এটি ফাইলের সাথে মিল পাওয়া খুব উপযুক্ত নয় এবং কোনও শিক্ষানবিশকে জটিল করে তোলে। বেশিরভাগ ক্ষেত্রে, আপনার যা দরকার তা হ'ল ওয়াইল্ডকার্ড যা একটি ( ?
) বা কোনও সংখ্যা ( *
) এর অক্ষরকে প্রতিস্থাপন করতে পারে ।
এখন, বিভিন্ন শেল বিভিন্ন গ্লোবিং অপারেটর যুক্ত করেছে। আজকাল, ksh এবং zsh গ্লোবগুলি (এবং কিছু পরিমাণে bash -O extglob
যা ksh গ্লোবগুলির একটি উপসেট প্রয়োগ করে) কার্যকরীভাবে একটি সিনট্যাক্সের সাথে regexps সমান যা ফাইলের নাম এবং বর্তমান শেল সিনট্যাক্সের সাথে কম ব্যবহারযোগ্য। উদাহরণস্বরূপ, zsh
(এক্সটেনডগ্লোব এক্সটেনশন সহ), আপনি এটি করতে পারেন:
echo a#.txt
যদি তুমি চাও (অসম্ভাব্য) ফাইলের নামের যে ক্রমের গঠিত মেলে a
দ্বারা অনুসরণ .txt
। এর চেয়ে সহজ echo (^a*\.txt$)
(এখানে শেল অপারেটরগুলি থেকে রেগেক্স অপারেটরগুলি পৃথক করার উপায় হিসাবে ব্রেসগুলি ব্যবহার করা হয়েছে যা শেলগুলি এটির সাথে মোকাবিলা করার এক উপায় হতে পারে)।
echo (foo|bar|<1-20>).(#i)mpg
এমপিজি ফাইলগুলির জন্য (কেস সংবেদনশীল) যার ভিত্তি নাম ফু, বার বা 1 থেকে 20 এর দশমিক সংখ্যা ...
ksh93
এখন এটির গ্লোবগুলিতে রিজেক্সপস (বেসিক, এক্সটেন্ডেড, পার্ল-লাইক বা "অ্যাগমেন্টেড") অন্তর্ভুক্ত করতে পারে (যদিও এটি বেশ বগি) এবং এমনকি গ্লোব এবং রেজিএক্সএক্স ( printf %R
, printf %P
) এর মধ্যে রূপান্তর করার জন্য একটি সরঞ্জাম সরবরাহ করে :
echo ~(Ei:.*\.txt)
ই এক্সটেন্ডেড নিয়মিত প্রকাশের সাথে টেক্সট ফাইলগুলি মেলে (গোপন নয়) , কেস- আমি সংবেদনশীলভাবে।
rm -- ^[^.].*\.txt$
পরিবর্তে করছেন বিবেচনা করবেনrm -- *.txt
?