কোলেশন অর্ডার LC_COLLATE
কেবল স্বতন্ত্র চরিত্রের ক্রমানুসারে নয়, চরিত্রের ব্যাপ্তির অর্থও সংজ্ঞায়িত করে। নাকি তা করে? নিম্নলিখিত স্নিপেট বিবেচনা করুন:
unset LANGUAGE LC_ALL
echo B | LC_COLLATE=en_US grep '[a-z]'
স্বজ্ঞাতভাবে, এতে B
নেই [a-z]
, সুতরাং এটি কোনও কিছুই আউটপুট করা উচিত নয়। উবুন্টু 8.04 বা 10.04 এ যা ঘটে। তবে কিছু মেশিনে ডিবিয়ান লেনি বা স্ক্রুগুলি চালিত B
পাওয়া যায়, কারণ এই পরিসীমাটির a-z
মধ্যে a
এবং z
কোলেশন ক্রমের মধ্যে থাকা সমস্ত কিছুই অন্তর্ভুক্ত থাকে , যার B
মাধ্যমে মূলধনগুলিও অন্তর্ভুক্ত থাকে Z
।
পরীক্ষিত সমস্ত সিস্টেমে en_US
লোকেল উত্পন্ন হয়। আমি লোকেলটি পৃথক করে দেখার চেষ্টাও করেছি: উপরে যে মেশিনগুলি B
মিলছে, সেখানে {en_{AU,CA,GB,IE,US},fr_FR,it_IT,es_ES,de_DE}{iso8859-1,iso8859-15,utf-8}
জাপানিদের (যে কোনও উপলভ্য এনকোডিংয়ে) এবং C
/ ব্যতীত প্রতিটি উপলভ্য লোকালে (বেশিরভাগ ল্যাটিন-ভিত্তিক: এছাড়াও চীনা স্থানীয়) মধ্যে একই ঘটনা ঘটে POSIX
।
আপনি যখন ASCII ছাড়িয়ে যান, তখন নিয়মিত ভাবের মধ্যে চরিত্রের ব্যাপ্তিগুলির অর্থ কী ? একদিকে কিছু দেবিয়ান ইনস্টলেশন এবং অন্যদিকে অন্যান্য দেবিয়ান ইনস্টলেশন এবং উবুন্টুর মধ্যে পার্থক্য কেন? অন্যান্য সিস্টেমগুলি কীভাবে আচরণ করে? কে সঠিক, এবং কার বিরুদ্ধে একটি বাগ রিপোর্ট করা উচিত?
(নোট যে আমি বিশেষভাবে চরিত্রের আচরণ সম্পর্কে জিজ্ঞেস করছি যেমন রেঞ্জ [a-z]
মধ্যে en_US
লোকেল, প্রাথমিকভাবে গনুহ libc ভিত্তিক সিস্টেমে। আমি ছোট হাতের অক্ষর বা হওয়া ASCII ছোট হাতের অক্ষর মেলে না জিজ্ঞেস করছি।)
দুই ডেবিয়ান মেশিন, এক যেখানে উপর B
রয়েছে [a-z]
এবং এক যেখানে তা না হয়, আউটপুট LC_COLLATE=en_US locale -k LC_COLLATE
হল
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=1
collate-codeset="ISO-8859-1"
এবং এর আউটপুট LC_COLLATE=en_US.utf8 locale -k LC_COLLATE
হয়
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=2039
collate-codeset="UTF-8"
C
হিসাবে ব্যবহৃত হয় এবং এর কোলেশন ক্রমটি সোজা বাইট মান হয়, সুতরাং মিলবে B
না। এর আউটপুটে প্রদর্শিত একটি লোকালে পরীক্ষা করুন locale -a
।
en_US
যদিও জেনারেট হয়েছে কিনা তা পরীক্ষা করে দেখেনি।