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