![为什么要对折叠大小写进行排序以及区分大小写的选项是什么?](https://linux22.com/image/164289/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%AF%B9%E6%8A%98%E5%8F%A0%E5%A4%A7%E5%B0%8F%E5%86%99%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F%E4%BB%A5%E5%8F%8A%E5%8C%BA%E5%88%86%E5%A4%A7%E5%B0%8F%E5%86%99%E7%9A%84%E9%80%89%E9%A1%B9%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在尝试区分大小写地对列表字符串进行排序,但列表是以不区分大小写的顺序出现的。用于排序的 man 或 --help info 为我提供了 -f 或 --ignore-case 选项,但没有列出用于不敏感排序的选项以覆盖似乎是默认顺序的选项。我检查以确保没有为排序定义别名。
为什么排序默认操作是选项让我选择的内容,为什么没有记录可以覆盖该默认值的选项?
进一步检查使它看起来像是在进行字典排序,因为它似乎忽略了标点符号。无论如何,我希望它的行为就像它应该默认的那样,或者至少给我 CLI 覆盖以使其表现得像它应该的那样。
排序 --version 排序 (GNU coreutils) 8.4
我认为是 Centos 6。
答案1
这取决于您的语言环境(这在 Debian/GNU 系统上):
$ printf '%s\n' B A b a | LC_COLLATE=en_US.UTF-8 sort
a
A
b
B
$ printf '%s\n' B A b a | LC_COLLATE=C sort
A
B
a
b
GNU sort 的手册页提到了这一点:
* 警告 *环境指定的区域设置会影响排序顺序。设置
LC_ALL=C
为获取使用本机字节值的传统排序顺序。
LC_COLLATE
是影响排序的选项,而LC_ALL
是 overkill 开关,它会覆盖所有其他LC_*
选项。
请注意,至少在 中,en_US.UTF-8
这不是不区分大小写的排序,因为无论原始顺序如何,它都会a
在前面排序。A
该locale
命令应显示有效的区域设置。