Als ich versuchte, den ls-Befehl zurückzuentwickeln, stieß ich auf ein interessantes Verhalten. Wenn ich 3 Dateien erstelle, foo.png, foopa.png, und fooqa.png, sortiert ls sie als foopa.png, foo.png, und fooqa.png. Ich habe es auch mit der Erweiterung .gif versucht und es scheint, dass es passiert, wenn p und q durch den ersten Buchstaben der Erweiterung und den nächsten Buchstaben im Alphabet ersetzt werden; also im Fall von .Gwenn es g und h wäre. ( fooga.gif, dann foo.gif, dann fooha.gif)
Warum wird die Ausgabe auf diese Weise sortiert?
Antwort1
Dies hängt von der Sortierreihenfolge Ihres Gebietsschemas ab:
>LANG=en_IE.UTF-8 ls -1 foo*
foopa.png
foo.png
fooqa.png
>LANG=C ls -1 foo*
foo.png
foopa.png
fooqa.png
Sie können auch die Variable LC_COLLATE anstelle von LANG verwenden und das POSIX-Gebietsschema anstelle des C-Gebietsschemas verwenden.
Die Sortierreihenfolge in C ist rein alphabetisch (ASCII-Reihenfolge). Andere Sortierreihenfolgen (wie Englisch) betrachten möglicherweise Leerzeichen und Sonderzeichen wie Punkte als Trennzeichen und behandeln „Wörter“ entweder separat oder ignorieren diese Trennzeichen einfach (was hier der Fall zu sein scheint).
Beachten Sie, dass das Nicht-UTF-8-Gebietsschema auch mit alphabetischem ASCII sortiert:
>LANG=en_IE ls -1 foo*
foo.png
foopa.png
fooqa.png
Nach etwas mehr Recherche scheint es, dass das Ignorieren der Zeichensetzung eine gängige Funktion von Unicode-fähigen Gebietsschemas wie diesen ist *.UTF-8.


