Ao classificar nomes de arquivos, ls
ignora caracteres como -,_
. Eu esperava que ele usasse esses caracteres na classificação também.
Um exemplo:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Agora exiba esses arquivos com ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
O que eu esperava era algo assim:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
ou seja, eu esperava que os caracteres não alfanuméricos fossem levados em consideração ao classificar.
Alguém pode explicar esse comportamento? Esse comportamento é determinado por um padrão? Ou isso ocorre porque a codificação é UTF-8?
Atualização: Parece que isso está relacionado à classificação 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
[_-,.]
estão sendo agrupados e de alguma forma semi-ignorados. Não sei exatamente como ou onde esse agrupamento é definido, mas deve ser um problema de agrupamento, porque simplesmente, e apenas, alterar o agrupamento para C (via LC_COLLATE=C ls -l
) é suficiente para fornecer a ordem de classificação que você esperava (assumindo que LC_ALL
é não substituindo LC_COLLATE
). Isso vale para toda a gama de caracteres no Unicode Basic Multilingual Plane ... Eu editei a minha resposta para incluir um script de exemplo que confirma isso ...
LC_COLLATE=C ls
?