เมื่อเรียงลำดับชื่อไฟล์ละเว้นตัวอักษรเช่น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
) สิ่งนี้ถือเป็นจริงสำหรับตัวละครทุกช่วงใน Unicode Basic Multilingual Plane ... ฉันได้แก้ไขคำตอบของฉันให้รวมสคริปต์ตัวอย่างที่ให้สิ่งนี้ออกมา ...
LC_COLLATE=C ls
?