bash: como para o loop ordena arquivos ao iterar [duplicado]

0

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

Isto está documentado em algum lugar?

    
por pkaramol 30.05.2018 / 11:36

2 respostas

3

De acordo com a seção man bash em "Expansão do nome do caminho":

If one of these characters appears, then the word is regarded as a pattern, and replaced with an alphabetically sorted list of filenames matching the pattern […]

Esta classificação depende do valor de $LC_COLLATE :

This variable determines the collation order used when sorting the results of pathname expansion […]

Como você pode ver acima, isso não tem nada a ver com o loop for . Os globs podem ser usados de várias maneiras e sua expansão é sempre classificada.

    
por 30.05.2018 / 11:40
2

for loops não classificam, eles fornecem os valores exatamente na ordem em que foram apresentados:

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

Os Globs, por outro lado, são classificados alfabeticamente, independentemente de você os usar em for ou em qualquer outro lugar:

$ touch b a c
$ echo *
a b c
    
por 30.05.2018 / 11:45

Tags