Dosya adlarını sıralarken, ls
gibi karakterleri yoksayar -,_
. Bu karakterleri de sıralamada kullanmasını bekliyordum.
Bir örnek:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Şimdi bu dosyaları şununla göster ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
Beklediğim şey şunun gibi bir şeydi:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
Yani, alfasayısal olmayan karakterlerin sıralama sırasında dikkate alınmasını beklerdim.
Birisi bu davranışı açıklayabilir mi? Bu davranış standart tarafından zorunlu mu? Yoksa bu kodlamanın UTF-8 olması nedeniyle mi?
Güncelleme: Bunun UTF-8 sıralama ile ilgili olduğu görülüyor:
$ LC_COLLATE=C ls -1
a,1
a,2
a-1
a-2
a.1
a.2
a1
a2
a_1
a_2
[_-,.]
gruplandırılmış ve bir şekilde yarı ihmal edilmiş olduğu doğrudur . Basitçe ve sadece, için harmanlama değiştirme çünkü ben böyle harmanlama tanımlanır tam olarak nasıl ve nerede bilmiyorum, ama bir harmanlama sorunu olmalı C (aracılığıyla LC_COLLATE=C ls -l
) varsayarak (size beklenen sıralama düzeni vermek için yeterlidir LC_ALL
olduğunu geçersiz kılma değil LC_COLLATE
). Bu, Unicode Temel Çok Dilli
LC_COLLATE=C ls
?