为什么要对折叠大小写进行排序以及区分大小写的选项是什么?

为什么要对折叠大小写进行排序以及区分大小写的选项是什么?

我正在尝试区分大小写地对列表字符串进行排序,但列表是以不区分大小写的顺序出现的。用于排序的 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命令应显示有效的区域设置。

相关内容