ls
Ignoriert beim Sortieren von Dateinamen Zeichen wie -,_
. Ich hatte erwartet, dass diese Zeichen auch beim Sortieren verwendet werden.
Ein Beispiel:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Zeigen Sie diese Dateien nun an mit ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
Was ich erwartet hatte, war ungefähr so:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
Dh ich habe erwartet, dass die nicht alphanumerischen Zeichen beim Sortieren berücksichtigt werden.
Kann jemand dieses Verhalten erklären? Ist dieses Verhalten durch einen Standard vorgeschrieben? Oder liegt das daran, dass die Codierung UTF-8 ist?
Update: Es scheint, dass dies mit der UTF-8-Sortierung zusammenhängt:
$ LC_COLLATE=C ls -1
a,1
a,2
a-1
a-2
a.1
a.2
a1
a2
a_1
a_2
[_-,.]
dass gruppiert und irgendwie teilweise ignoriert werden. Ich weiß nicht genau, wie oder wo eine solche Kollatierung definiert ist, aber es muss ein Kollatierungsproblem sein, da es ausreicht , die Kollatierung einfach und ausschließlich in C (Via LC_COLLATE=C ls -l
) zu ändern , um Ihnen die erwartete Sortierreihenfolge zu geben (vorausgesetzt, dies LC_ALL
ist nicht überschreiben LC_COLLATE
). Dies gilt für den gesamten Bereich der Zeichen in der mehrsprachigen Unicode-Grundebene ... Ich habe meine Antwort so bearbeitet, dass sie ein Beispielskript enthält, das dies bestätigt ...
LC_COLLATE=C ls
?