linux排序意外输出

use*_*070 3 shell

我使用排序文件

ABC
AB-C
ABCDEFG-HI

我明白了

ABC
AB-C
ABCDEFG-HI

为什么按这种方式对字符串进行排序?如何按字母顺序排序' - '?

Dar*_*ust 5

@cnicutar提供的解决方案是正确的,但原因需要解释,这就是我给出新答案的原因.

在与@cnicutar讨论后,我最终怀疑coreutils中的一个错误' sort我发现这种排序行为是预期的:

此时,由于'en_US.UTF-8'指定了此行为,因此折叠并忽略标点符号,因此排序显示已损坏.

所以sort,您的输入似乎映射如下:

ABC -> ABC
AB-C -> ABC
ABCDEFG-HI -> ABCDEFGHI
Run Code Online (Sandbox Code Playgroud)

如果您想要纯ASCII排序,则需要调用LC_ALL=C sort(临时将语言环境设置为C调用时sort,这意味着"标准"行为没有本地化;您也可以使用POSIX而不是C).

在其他Unix上,这种行为似乎有所不同(在Mac OS X上测试哪些用户空间工具是从FreeBSD派生的),但是LC_ALL=C sort应该在所有POSIX系统中产生相同的行为.