bash: wie eine for-Schleife Dateien beim Iterieren sortiert

bash: wie eine for-Schleife Dateien beim Iterieren sortiert

Was ist das Standardverhalten der forSchleife in Bezug auf die Sortierung beim Auflisten von Dateien in einem Verzeichnis?

z.B

for sqlfile in *.sql; do mysql -u root -p pass < sqlfile; done

Ist das irgendwo dokumentiert?

Antwort1

Gemäß man bashdem Abschnitt „Pfadnamenerweiterung“:

Wenn eines dieser Zeichen vorkommt, wird das Wort als Muster betrachtet und durch einalphabetisch sortiertListe der Dateinamen, die dem Muster entsprechen […]

Diese Sortierung hängt vom Wert von ab $LC_COLLATE:

Diese Variable bestimmt die Sortierreihenfolge, die beim Sortieren der Ergebnisse der Pfadnamenerweiterung verwendet wird […]

Wie Sie oben sehen können, hat dies nichts mit der forSchleife zu tun. Globs können auf viele Arten verwendet werden und ihre Erweiterung ist immer sortiert.

Antwort2

forSchleifen sortieren nicht, sie geben Ihnen die Werte in genau der Reihenfolge, in der sie präsentiert wurden:

$ for x in b a c ; do echo $x ; done
b
a
c

Globs hingegen werden alphabetisch sortiert, unabhängig davon, ob Sie sie in einem foroder anderswo verwenden:

$ touch b a c
$ echo *
a b c

verwandte Informationen