5

Насколько я могу судить, установка переменной среды LC_COLLATE=en_US.utf8 меняет четыре вещи по сравнению с LC_COLLATE=c , в отношении того, как программы, подобные ls будут сортировать файлы:

  1. Символы Unicode сохраняются (а не заменяются на ?? мусор)
  2. Акценты и диакритические знаки не влияют на порядок сортировки
  3. Различия в регистре не влияют на порядок сортировки
  4. Знаки пунктуации (например, точки) не влияют на порядок сортировки

Функция 1 обязательна в наше время.
Функции 2 и 3 также хороши, так как они упрощают работу с реальными именами файлов Unicode.
С другой стороны, функция 4 - это то, что я нахожу действительно непродуктивным в своей повседневной работе, поскольку она часто генерирует не интуитивно понятные порядки сортировки для имен файлов Linux - где точки, как правило, используются для разделения суффиксов или указать точечные файлы. Я действительно не могу представить, почему кто-то думал, что было бы хорошей идеей игнорировать точки при сортировке имен файлов.

Например:

$ touch foo.txt foo2.txt foó3.txt foo4.txt

$ LC_COLLATE=en_US.utf8 ls
foo2.txt  foó3.txt  foo4.txt  foo.txt

$ LC_COLLATE=c ls
foo.txt  foo2.txt  foo4.txt  fo??3.txt

Ни один не является удовлетворительным. Вот как я бы хотел, чтобы эти файлы были отсортированы:

foo.txt  foo2.txt  foó3.txt  foo4.txt

Другими словами, так же, как с LC_COLLATE=en_US.utf8 , за исключением того, что знаки препинания обрабатываются как значащие символы (которые сортируются перед буквами).

Существует ли какая-либо настройка LC_COLLATE, которая делает это?

Если отсутствует пунктуация, которая поддерживает все функции 1-3, существует ли хотя бы одна, которая поддерживает функцию 1 (то есть сортировку по типу LC_COLLATE=c но не искажать символы Юникода)?

1 ответ1

1

Проблема номер 1 состоит в том, что LC_COLLATE=c является недопустимым языковым стандартом. Вам нужно использовать заглавную C: LC_COLLATE=C

Пример:

$ LC_COLLATE=c ls-1a
./
../
.sharp
.zharp
Sharp
sharp
szharp
zharp
??harp


$ LC_COLLATE=c ls-1a
./
../
.sharp
.zharp
Sharp
sharp
szharp
zharp
ßharp

Я не знаю, как выполнить сортировку с поддержкой юникода без сортировки имен файлов, начинающихся с точки сверху (хотя поиск ответа на этот вопрос и оказался здесь):-/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .