Podczas sortowania nazw plików ls
ignoruje znaki takie jak -,_
. Spodziewałem się, że użyje również tych znaków do sortowania.
Przykład:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Teraz wyświetl te pliki za pomocą ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
Spodziewałem się czegoś takiego:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
tj. spodziewałem się, że znaki niealfanumeryczne będą brane pod uwagę podczas sortowania.
Czy ktoś może wyjaśnić to zachowanie? Czy takie zachowanie jest wymagane przez standard? A może jest to spowodowane kodowaniem UTF-8?
Aktualizacja: Wygląda na to, że jest to związane z sortowaniem 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
[_-,.]
są grupowane i częściowo ignorowane. Nie wiem dokładnie, jak i gdzie takie sortowanie jest zdefiniowane, ale musi to być problem z sortowaniem, ponieważ po prostu i tylko zmiana sortowania na C (via LC_COLLATE=C ls -l
) wystarczy, aby dać ci porządek sortowania, którego się spodziewałeś (zakładając, że LC_ALL
jest to nie zastępuje LC_COLLATE
). Odnosi się to do całego zakresu znaków w wielojęzycznym samolocie podstawowym Unicode ... Zredagowałem swoją odpowiedź, aby dołączyć przykładowy skrypt, który to
LC_COLLATE=C ls
?