相关疑难解决方法(0)

是否有支持标点符号的 Unicode 感知 LC_COLLATE 排序顺序?

据我所知,设置环境变量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
Run Code Online (Sandbox Code Playgroud)

两者都不令人满意。这就是我希望对这些文件进行排序的方式:

foo.txt  foo2.txt  foó3.txt  foo4.txt
Run Code Online (Sandbox Code Playgroud)

换句话说,就像 with 一样LC_COLLATE=en_US.utf8,只是标点符号被视为重要字符(在字母之前排序)。

是否存在执行此操作的任何 LC_COLLATE 设置?

如果没有支持所有功能 1-3 的标点符号,是否至少有一个支持功能 1(即排序LC_COLLATE=c但不乱码 Unicode 字符)?

linux shell locale unicode sorting

6
推荐指数
1
解决办法
1943
查看次数

标签 统计

linux ×1

locale ×1

shell ×1

sorting ×1

unicode ×1