@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系统中产生相同的行为.