Существует ли порядок сортировки LC_COLLATE с поддержкой Юникода, который учитывает пунктуацию?
Насколько я могу судить, установка переменной среды LC_COLLATE=en_US.utf8
меняет четыре вещи по сравнению с LC_COLLATE=c
о том, как программы, как ls
будет сортировать файлы:
- Символы Unicode сохраняются (а не заменяются
??
мусор) - Акценты и диакритические знаки не влияют на порядок сортировки
- Различия в регистре не влияют на порядок сортировки
- Знаки пунктуации (например, точки) не влияют на порядок сортировки
Функция 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 в том, что 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
Я не знаю, как выполнить сортировку с поддержкой юникода без сортировки имен файлов, начинающихся с точки сверху (хотя поиск ответа на этот вопрос и оказался здесь):-/