সমস্ত শেলগুলিতে, গ্লোবগুলি ডিফল্ট অনুসারে বাছাই করা হয়। তারা ইতিমধ্যে/etc/glob
70 এর দশকের গোড়ার দিকে ইউনিক্সের প্রথম সংস্করণে গ্লোবগুলি প্রসারিত করার জন্য কেন টম্পসনের শেল নামে ডাকার সাহায্যকারী দ্বারা (এবং যা গ্লোবদের নাম দিয়েছিল) দ্বারা এসেছিল।
কারণ sh
, পসিক্সের strcoll()
মাধ্যমে সেগুলি বাছাই করা দরকার, এটি ব্যবহারকারীর লোকেলে বাছাইয়ের ক্রমটি ব্যবহার করছে যেমন ls
কিছু এখনও এটির মাধ্যমে করে থাকে strcmp()
, এটি কেবল বাইট মানগুলির উপর ভিত্তি করে।
$ dash -c 'echo *'
Log01B log-0D log00 log01 log02 log0A log0B log0C log4E log4F log50 log① log② lóg01
$ bash -c 'echo *'
log① log② log00 log01 lóg01 Log01B log02 log0A log0B log0C log-0D log4E log4F log50
$ zsh -c 'echo *'
log① log② log00 log01 lóg01 Log01B log02 log0A log0B log0C log-0D log4E log4F log50
$ ls
log② log① log00 log01 lóg01 Log01B log02 log0A log0B log0C log-0D log4E log4F log50
$ ls | sort
log②
log①
log00
log01
lóg01
Log01B
log02
log0A
log0B
log0C
log-0D
log4E
log4F
log50
আপনি উপরে লক্ষ্য করতে পারেন যে শেলগুলি যে লোকেলের উপর ভিত্তি করে বাছাই করে, এখানে একটি en_GB.UTF-8
লোকেল সহ একটি জিএনইউ সিস্টেমে -
ফাইলের নামগুলিতে বাছাই করার জন্য উপেক্ষা করা হয় (বেশিরভাগ বিরামচিহ্ন অক্ষর হবে)। ó
আরো প্রত্যাশিত পথ (অন্তত ব্রিটিশ জনগণের কাছে) এ অনুসারে বাছাই করা হয়, এবং কেস উপেক্ষা করা হয় (যখন এটি বন্ধন সিদ্ধান্ত নিতে আসে ব্যতীত)।
তবে আপনি লগ-লগের জন্য কিছু অসঙ্গতি লক্ষ্য করবেন ② এটি কারণ N এবং ② এর বাছাইয়ের ক্রমটি জিএনইউ লোকালগুলিতে সংজ্ঞায়িত হয়নি (বর্তমানে; আশা করি এটি কোনও দিন স্থির হয়ে যাবে)। তারা একই সাজান, যাতে আপনি এলোমেলো ফলাফল পেতে।
লোকেল পরিবর্তন করা বাছাইয়ের ক্রমে প্রভাব ফেলবে। একটি পছন্দ strcmp()
মত সাজানোর জন্য আপনি লোকেলটি সিটিতে সেট করতে পারেন:
$ bash -c 'echo *'
log① log② log00 log01 lóg01 Log01B log02 log0.2 log0A log0B log0C log-0D log4E log4F log50
$ bash -c 'LC_ALL=C; echo *'
Log01B log-0D log0.2 log00 log01 log02 log0A log0B log0C log4E log4F log50 log① log② lóg01
মনে রাখবেন যে কিছু লোকেল অল-এএসসিআইআই অল-অ্যালাম স্ট্রিংয়ের জন্য এমনকি কিছু বিভ্রান্তি সৃষ্টি করতে পারে। চেকের মতো (কমপক্ষে জিএনইউ সিস্টেমে) যেখানে ch
একটি কোলটিং উপাদান রয়েছে যা এর পরে সাজায়h
:
$ LC_ALL=cs_CZ.UTF-8 bash -c 'echo *'
log0Ah log0Bh log0Dh log0Ch
বা, @ নিনজালজের দ্বারা উল্লেখ করা হয়েছে, এমনকি হাঙ্গেরীয় স্থানীয় লোকালগুলিতে এমনকি অযৌক্তিকরা:
$ LC_ALL=hu_HU.UTF-8 bash -c 'echo *'
logX LOGx LOGX logZ LOGz LOGZ logY LOGY LOGy
ইন zsh
, আপনি গ্লোব কোয়ালিফায়ারগুলির সাথে বাছাই করতে পারেন । এই ক্ষেত্রে:
echo *(om) # to sort by modification time
echo *(oL) # to sort by size
echo *(On) # for a *reverse* sort by name
echo *(o+myfunction) # sort using a user-defined function
echo *(N) # to NOT sort
echo *(n) # sort by name, but numerically, and so on.
সংখ্যার সাজানোর ধরণের বিকল্পটি echo *(n)
বিশ্বব্যাপী সক্ষম করা যেতে পারে numericglobsort
:
$ zsh -c 'echo *'
log① log② log00 log01 lóg01 Log01B log02 log0.2 log0A log0B log0C log-0D log4E log4F log50
$ zsh -o numericglobsort -c 'echo *'
log① log② log00 lóg01 Log01B log0.2 log0A log0B log0C log01 log02 log-0D log4E log4F log50
আপনি যদি (যেমন আমি ছিলাম) সেই নির্দিষ্ট পরিস্থিতিতে এই আদেশটি দ্বারা বিভ্রান্ত হন (এখানে আমার ব্রিটিশ লোকাল ব্যবহার করছেন), বিশদ জন্য এখানে দেখুন।
sort
যখন কোনও ফাইল নাম গ্লোব্বিং প্যাটার্নকে প্রসারিত করে তখন একই রকম।