फ़ाइल नामों को सॉर्ट करते समय, ls
वर्णों की उपेक्षा करें -,_
। मुझे उम्मीद थी कि यह उन पात्रों को भी छाँटने में इस्तेमाल करेगा।
एक उदाहरण:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
अब इन फ़ाइलों को प्रदर्शित करें ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
मुझे उम्मीद थी कि कुछ इस तरह से होगा:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
यानी मुझे उम्मीद थी कि छँटाई करते समय गैर-अल्फ़ान्यूमेरिक वर्णों को ध्यान में रखा जाएगा।
क्या कोई इस व्यवहार की व्याख्या कर सकता है? क्या यह व्यवहार एक मानक द्वारा अनिवार्य है? या क्या यह एन्कोडिंग UTF-8 होने के कारण है?
अद्यतन: ऐसा लगता है कि यह UTF-8 छँटाई से संबंधित है:
$ LC_COLLATE=C ls -1
a,1
a,2
a-1
a-2
a.1
a.2
a1
a2
a_1
a_2
[_-,.]
समूहबद्ध किया जा रहा है और किसी तरह अर्ध-उपेक्षित है। मुझे ठीक से पता नहीं है कि इस तरह के टकराव को कैसे या कहां परिभाषित किया गया है, लेकिन यह एक टकराव का मुद्दा होना चाहिए, क्योंकि बस, और केवल, कोलाज को C (के माध्यम से LC_COLLATE=C ls -l
) में बदलना आपको अपेक्षित क्रम देने के लिए पर्याप्त है (मान LC_ALL
लेना) ओवरराइडिंग नहीं LC_COLLATE
)। यह यूनिकोड बेसिक बहुभाषी विमान में वर्णों की पूरी श्रृंखला के लिए सही है ... मैंने एक उदाहरण स्क्रिप्ट को शामिल करने के लिए अपना उत्तर संपादित किया है जो इसे बाहर करता है ...
LC_COLLATE=C ls
?