Під час сортування імен файлів 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 Basic ... Я відредагував свою відповідь, щоб включити приклад сценарію, який це підтверджує ...
LC_COLLATE=C ls
?