我注意到以下排序输出。谁明白为什么'。'在第一次和第二次结束时排在前面?
我试图调试一个查找大型排序文件中的行的程序,但罪魁祸首似乎是我对linux排序的期望/理解。
$ sort --debug
sort: using ‘en_US.UTF-8’ sorting rules
/mnt/x/E
/mnt/x/.
<ctrl-D>
/mnt/x/.
________
/mnt/x/E
________
$ sort --debug
sort: using ‘en_US.UTF-8’ sorting rules
/mnt/x/Ed
/mnt/x/.T
<ctrl-D>
/mnt/x/Ed
_________
/mnt/x/.T
_________
$
答案 0 :(得分:3)
不是那个“。”在其他角色之前或之后出现 - 它根本就没有被检查过;它纯粹基于字母字符进行排序。
在您的第一个示例中,<end-of-string>
在E
之前排序;在第二个示例中,E
在T
之前排序。
此行为取决于排序规则的区域设置。您可以使用环境变量对此进行影响,例如LC_COLLATE
:
$ env LC_COLLATE=C sort
/mnt/x/Ed
/mnt/x/.T
^D
/mnt/x/.T
/mnt/x/Ed
$ env LC_COLLATE=en_US.UTF-8 sort
/mnt/x/Ed
/mnt/x/.T
^D
/mnt/x/Ed
/mnt/x/.T
$
在C
区域设置下,将考虑所有ASCII字符,并按ASCII顺序排序;在许多其他语言环境中,标点符号被忽略 - 这可能是导致您看到的行为的原因。
您可以使用locale
命令检查语言环境设置。