据我所知,设置环境变量LC_COLLATE=en_US.utf8与 相比改变了四件事LC_COLLATE=c,关于程序如何ls对文件进行排序:
??垃圾替换)功能 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 字符)?