Tüm kabuklarda, globler varsayılan olarak sıralanır. Onlar zaten,/etc/glob 70'li yılların başında (ve globlara isimlerini veren) Unix'in ilk versiyonunda globları genişletmek için Ken Thompson'ın kabuğunun çağırdığı yardımcınızdı .
Çünkü shPOSIX strcoll(), kullanıcı tarafından yerel ayarlarda sıralama düzenini kullanarak, yalnızca lshala strcmp()byte değerlerine dayanan, yine de bazılarının yaptığı gibi, sıralama yapmalarını gerektirir .
$ 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
Bir bir GNU sistemi burada, yerel ayara dayalı sıralama yapmak o kabuklar için yukarıda görebilirsiniz en_GB.UTF-8yerel ayarı, -dosya adlarında (olur Çoğu noktalama işaretini) sıralamak için yok sayılır. ó(En azından İngiliz halkına) daha beklenen şekilde sıralanır ve dava (bağlarını karar geldiğinde hariç) göz ardı edilir.
Ancak, log① log① için bazı tutarsızlıklar göreceksiniz. Bunun nedeni, ① ve the 'nın sıralama düzeninin GNU yerellerinde tanımlanmamış olmasıdır (şu anda; umarım bir gün sabitlenir). Aynısını sıralarlar, böylece rastgele sonuçlar elde edersiniz.
Yerel ayarların değiştirilmesi sıralama düzenini etkiler. strcmp()Benzer bir sıralama elde etmek için yerel ayarı C olarak ayarlayabilirsiniz :
$ 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
Bazı yerel ayarların, tüm ASCII alnum dizeleri için bile bazı kafa karışıklıklarına neden olabileceğini unutmayın. Çekliler gibi (en azından GNU sistemlerinde) chaşağıdakileri sıralayan bir harmanlama öğesinin bulunduğu yer h:
$ LC_ALL=cs_CZ.UTF-8 bash -c 'echo *'
log0Ah log0Bh log0Dh log0Ch
Ya da, @ ninjalj'ın belirttiği gibi, Macar yerlerinde tuhaf olanlar bile:
$ LC_ALL=hu_HU.UTF-8 bash -c 'echo *'
logX LOGx LOGX logZ LOGz LOGZ logY LOGY LOGy
İçinde zsh, glob niteleyicileri ile sıralamayı seçebilirsiniz . Örneğin:
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.
Sayısal tür seçeneği echo *(n), aşağıdaki numericglobsortseçeneklerle genel olarak da etkinleştirilebilir :
$ 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
Siz (olduğum gibi) bu sırada (buradaki İngiliz yerel ayarımı kullanarak) söz konusu sırayla karıştıysanız, ayrıntılar için buraya bakın.
sort, bir dosya adı globbing desenini genişletirken kabuk ile aynıdır.