Saat menyortir nama file, ls
abaikan karakter suka -,_
. Saya berharap untuk menggunakan karakter-karakter itu dalam menyortir juga.
Sebuah contoh:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Sekarang tampilkan file-file ini dengan ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
Apa yang saya harapkan adalah seperti ini:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
yaitu saya berharap karakter non-alfanumerik diperhitungkan saat menyortir.
Adakah yang bisa menjelaskan perilaku ini? Apakah perilaku ini diamanatkan oleh standar? Atau ini karena pengkodean menjadi UTF-8?
Pembaruan: Tampaknya ini terkait dengan pengurutan 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
[_-,.]
sedang dikelompokkan dan entah bagaimana semi-diabaikan. Saya tidak tahu persis bagaimana atau di mana pemeriksaan tersebut didefinisikan, tetapi harus menjadi masalah pemeriksaan, karena sederhana, dan hanya, mengubah pemeriksaan ke C (melalui LC_COLLATE=C ls -l
) cukup untuk memberikan urutan yang Anda harapkan (dengan asumsi LC_ALL
adalah tidak mengesampingkan LC_COLLATE
). Ini berlaku untuk seluruh jajaran karakter di Unicode Basic Multilingual Plane ... Saya telah mengedit jawaban saya untuk menyertakan contoh skrip yang menghasilkan ini ...
LC_COLLATE=C ls
?