Lors du tri des noms de fichiers, ls
ignore les caractères comme -,_
. Je m'attendais à ce qu'il utilise également ces caractères dans le tri.
Un exemple:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Affichez maintenant ces fichiers avec ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
Je m'attendais à quelque chose comme ça:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
c'est-à-dire que je m'attendais à ce que les caractères non alphanumériques soient pris en compte lors du tri.
Quelqu'un peut-il expliquer ce comportement? Ce comportement est-il imposé par une norme? Ou est-ce dû au fait que l'encodage est UTF-8?
Mise à jour: Il semble que cela soit lié au tri UTF-8:
$ LC_COLLATE=C ls -1
a,1
a,2
a-1
a-2
a.1
a.2
a1
a2
a_1
a_2
[_-,.]
sont regroupés et en quelque sorte semi-ignorés. Je ne sais pas exactement comment ou où une telle collecte est définie, mais il doit être un problème de classement, parce que tout simplement, et seulement, en changeant la collation C (via LC_COLLATE=C ls -l
) est suffisant pour vous donner l'ordre de tri que vous attendiez ( en supposant que LC_ALL
est pas prioritaire LC_COLLATE
). Cela est vrai pour toute la gamme de caractères dans le plan multilingue de base Unicode ... J'ai modifié ma réponse pour inclure un exemple de script qui
LC_COLLATE=C ls
?