
Mientras intentaba aplicar ingeniería inversa al comando ls, encontré un comportamiento interesante. Cuando creo 3 archivos, foo.png
, foopa.png
y fooqa.png
, ls los ordena como foopa.png
, foo.png
y fooqa.png
. También lo probé usando la extensión .gif y parece que sucede cuando pyq se reemplazan por la primera letra de la extensión y la siguiente letra del alfabeto; así en el caso de .gramosi fuera g y h. ( fooga.gif
, luego foo.gif
luego fooha.gif
)
¿Por qué ordena la salida de esta manera?
Respuesta1
Depende del orden de clasificación de su localidad:
>LANG=en_IE.UTF-8 ls -1 foo*
foopa.png
foo.png
fooqa.png
>LANG=C ls -1 foo*
foo.png
foopa.png
fooqa.png
También puede usar la variable LC_COLLATE en lugar de LANG y usar la configuración regional POSIX en lugar de la C.
El orden de clasificación C es puramente alfabético (orden ASCII). Otros órdenes de clasificación (como el inglés) pueden considerar espacios y caracteres especiales como puntos como separadores y manejar las "palabras" por separado o simplemente ignorar estos separadores (que parece ser el caso aquí).
Tenga en cuenta que la configuración regional que no es UTF-8 también ordena usando ASCII alfabético:
>LANG=en_IE ls -1 foo*
foo.png
foopa.png
fooqa.png
Después de investigar un poco más, parece que ignorar la puntuación es una característica común de las configuraciones regionales compatibles con Unicode como las *.UTF-8
.