Насколько я могу судить, установка переменной среды 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
но не искажать символы Юникода)?