
Qual é o comportamento padrão do for
loop em termos de classificação ao listar arquivos em um diretório?
por exemplo
for sqlfile in *.sql; do mysql -u root -p pass < sqlfile; done
Isso está documentado em algum lugar?
Responder1
De acordo com man bash
a seção sobre "Expansão do nome do caminho":
Se um desses caracteres aparecer, a palavra será considerada um padrão e substituída por umordenado alfabeticamentelista de nomes de arquivos que correspondem ao padrão […]
Essa classificação depende do valor de $LC_COLLATE
:
Esta variável determina a ordem de agrupamento usada ao classificar os resultados da expansão do nome do caminho [...]
Como você pode ver acima, isso não tem nada a ver com o for
loop. Globs podem ser usados de várias maneiras e sua expansão é sempre ordenada.
Responder2
for
os loops não são classificados, eles fornecem os valores exatamente na ordem em que foram apresentados:
$ for x in b a c ; do echo $x ; done
b
a
c
Globs, por outro lado, são classificados em ordem alfabética, independentemente de você usá-los em um for
ou em qualquer outro lugar:
$ touch b a c
$ echo *
a b c