Quando si ordinano i nomi dei file, ls
ignora i caratteri come -,_
. Mi aspettavo che usasse quei personaggi anche nell'ordinamento.
Un esempio:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Ora mostra questi file con ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
Quello che mi aspettavo era qualcosa del genere:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
cioè mi aspettavo che i caratteri non alfanumerici fossero presi in considerazione durante l'ordinamento.
Qualcuno può spiegare questo comportamento? Questo comportamento è richiesto da uno standard? O è dovuto alla codifica UTF-8?
Aggiornamento: sembra che questo sia correlato all'ordinamento 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
[_-,.]
vengono raggruppati e in qualche modo semi ignorati. Non so esattamente come o dove sia definito tale confronto, ma deve essere un problema di confronto, perché semplicemente e solo, cambiare il confronto in C (via LC_COLLATE=C ls -l
) è sufficiente per darti l'ordinamento che ti aspettavi (supponendo che LC_ALL
sia non prevalente LC_COLLATE
). Questo vale per l'intera gamma di caratteri nel piano multilingue Unicode Basic ... Ho modificato la mia risposta per includere uno script di esempio che lo
LC_COLLATE=C ls
?