bash: cómo el bucle for clasifica los archivos al iterar

bash: cómo el bucle for clasifica los archivos al iterar

¿Cuál es el comportamiento predeterminado del forbucle en términos de clasificación al enumerar archivos en un directorio?

p.ej

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

¿Está esto documentado en alguna parte?

Respuesta1

Según man bashla sección de "Expansión de nombre de ruta":

Si aparece uno de estos caracteres, entonces la palabra se considera como un patrón y se reemplaza con unordenado alfabéticamentelista de nombres de archivos que coinciden con el patrón […]

Esta clasificación depende del valor de $LC_COLLATE:

Esta variable determina el orden de clasificación utilizado al ordenar los resultados de la expansión del nombre de ruta […]

Como puede ver en lo anterior, esto no tiene nada que ver con el forbucle. Los globos se pueden utilizar de muchas maneras y su expansión siempre está ordenada.

Respuesta2

forlos bucles no ordenan, te dan los valores exactamente en el orden en que fueron presentados:

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

Los globos, por otro lado, se ordenan alfabéticamente, independientemente de si los usas en foro en cualquier otro lugar:

$ touch b a c
$ echo *
a b c

información relacionada