bash: как цикл for сортирует файлы при итерации

bash: как цикл for сортирует файлы при итерации

Каково поведение forцикла по умолчанию с точки зрения сортировки при перечислении файлов в каталоге?

например

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

Это где-то задокументировано?

решение1

Согласно man bashразделу «Расширение имени пути»:

Если появляется один из этих символов, то слово рассматривается как шаблон и заменяется насортировка по алфавитусписок имен файлов, соответствующих шаблону […]

Эта сортировка зависит от значения $LC_COLLATE:

Эта переменная определяет порядок сортировки, используемый при сортировке результатов расширения имени пути […]

Как вы можете видеть из вышесказанного, это не имеет ничего общего с forциклом. Глобы можно использовать многими способами, и их расширение всегда сортируется.

решение2

forЦиклы не сортируют, они выдают значения именно в том порядке, в котором они были представлены:

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

С другой стороны, глобусы сортируются в алфавитном порядке, независимо от того, используете ли вы их в a forили где-либо еще:

$ touch b a c
$ echo *
a b c

Связанный контент