
Was ist das Standardverhalten der for
Schleife 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 bash
dem 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 for
Schleife zu tun. Globs können auf viele Arten verwendet werden und ihre Erweiterung ist immer sortiert.
Antwort2
for
Schleifen 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 for
oder anderswo verwenden:
$ touch b a c
$ echo *
a b c