При сортировке имен файлов ls
игнорирует такие символы, как -,_
. Я ожидал, что он будет использовать эти символы в сортировке.
Пример:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Теперь отобразите эти файлы с помощью ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
То, что я ожидал, было что-то вроде этого:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
т.е. я ожидал, что при сортировке будут учитываться не алфавитно-цифровые символы.
Кто-нибудь может объяснить это поведение? Это поведение предписано стандартом? Или это связано с кодировкой UTF-8?
Обновление: Похоже, это связано с сортировкой 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
[_-,.]
они группируются и почему-то почти игнорируются. Я не знаю точно , как или где определяется такая сверка, но это должно быть проблемой сортировки, так просто, и только, изменяя параметры сортировки на C (через LC_COLLATE=C ls -l
) достаточно , чтобы дать вам порядок сортировки вы ожидали (при условии , LC_ALL
является не переопределять LC_COLLATE
). Это относится ко всему диапазону символов в базовой многоязычной плоскости Unicode ... Я отредактировал свой ответ, включив в него пример сценария, который это подтверждает ...
LC_COLLATE=C ls
?