Reihenfolge der Dateien, die mit einem Glob übereinstimmen

437
nautical

Angenommen, ich habe die folgenden Dateien in einem Ordner

1.txt 2.txt a.txt b.txt c.txt 

Wenn ich diese Dateien durch einen Glob übereinstimme, um sie zu verarbeiten, z

for f in *;do echo $f;done 

Sie werden dann Bash- entsprechend der Manpage - in alphabetischer Reihenfolge angezeigt.

Gibt es jedoch einen POSIX-Standard, der die passende Reihenfolge der Globs definiert? Auf diese Weise konnte ich mich auf eine bestimmte Reihenfolge in jeder Shell verlassen, solange sie POSIX-konform ist.

1

1 Antwort auf die Frage

1
John1024

Ja, die Bestellung ist für POSIX erforderlich. Aus der POSIX-Spezifikation :

Wenn das Muster mit vorhandenen Dateinamen oder Pfadnamen übereinstimmt, wird das Muster durch diese Dateinamen und Pfadnamen ersetzt und nach der im aktuellen Gebietsschema gültigen Sortierfolge sortiert. [Betonung hinzugefügt]

Um konsistente Ergebnisse zu gewährleisten, sollte ein Gebietsschema angegeben werden. Für die Programmierung ist die Einstellung LC_COLLATE=Ceine übliche Wahl.

LC_ALL = C ist keine sehr gute Wahl, da sonst alles in den ASCII-Modus gezwungen wird. Wenn Sie nur eine Sortierreihenfolge wünschen, setzen Sie stattdessen LC_COLLATE. grawity vor 8 Jahren 0
@Grawity Ja, COLLATE ist besser. Antwort aktualisiert John1024 vor 8 Jahren 0