
¿Cuál es el comportamiento predeterminado del for
bucle 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 bash
la 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 for
bucle. Los globos se pueden utilizar de muchas maneras y su expansión siempre está ordenada.
Respuesta2
for
los 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 for
o en cualquier otro lugar:
$ touch b a c
$ echo *
a b c