LC_COLLATEपरिभाषित करने के माध्यम से टकराव का क्रम न केवल व्यक्तिगत वर्णों का क्रमबद्ध क्रम है, बल्कि वर्ण श्रेणियों का अर्थ भी है। या करता है? निम्नलिखित स्निपेट पर विचार करें:
unset LANGUAGE LC_ALL
echo B | LC_COLLATE=en_US grep '[a-z]'
Intuitively, 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स्थानों में चरित्र श्रेणियों के व्यवहार के बारे में पूछ रहा हूं , मुख्य रूप से GNU 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उत्पन्न होता है, तो जाँच न करें ।