सभी गोले में, ग्लोब को डिफ़ॉल्ट रूप से क्रमबद्ध किया जाता है। वे पहले से ही/etc/glob
70 के दशक के शुरुआती दिनों में यूनिक्स के पहले संस्करण में ग्लब्स का विस्तार करने के लिए केन थॉम्पसन के शेल द्वारा बुलाए गए सहायक थे (और जिसने ग्लब्स को उनका नाम दिया)।
sh
POSIX के लिए , उन्हें 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
लोकल के साथ GNU सिस्टम पर , -
फ़ाइल नामों में छँटाई के लिए अनदेखा किया जाता है (अधिकांश विराम चिह्न वर्ण)। ó
एक और अधिक की उम्मीद जिस तरह से (कम से कम ब्रिटिश लोगों के लिए) में क्रमबद्ध हो जाता है, और मामले को नजरअंदाज कर दिया जाता है (जब यह संबंधों तय करने के लिए आता है को छोड़कर)।
हालाँकि, आप log you'll log inc के लिए कुछ विसंगतियों पर ध्यान देंगे। ऐसा इसलिए है क्योंकि GNU स्थानों में That's और the का छँटाई क्रम परिभाषित नहीं है (वर्तमान में, उम्मीद है कि यह किसी दिन तय हो जाएगा)। वे एक ही क्रमबद्ध करते हैं, इसलिए आपको यादृच्छिक परिणाम मिलते हैं।
स्थान बदलने से छँटाई क्रम प्रभावित होगा। आप एक समान strcmp()
सॉर्ट पाने के लिए लोकेल को C पर सेट कर सकते हैं :
$ 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
या, जैसा कि @ninjalj द्वारा बताया गया है, यहां तक कि हंगेरियन स्थानों में भी अजीब बातें हैं:
$ 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
उसी के समान है जब यह फ़ाइल नाम ग्लोबिंग पैटर्न का विस्तार कर रहा है।