bash: como o loop for classifica os arquivos durante a iteração

bash: como o loop for classifica os arquivos durante a iteração

Qual é o comportamento padrão do forloop 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 basha 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 forloop. Globs podem ser usados ​​de várias maneiras e sua expansão é sempre ordenada.

Responder2

foros 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 forou em qualquer outro lugar:

$ touch b a c
$ echo *
a b c

informação relacionada