
Каково поведение 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