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
उत्पन्न होता है, तो जाँच न करें ।