gnu coreutils 排序坏了吗?

Leo*_*yev 11 bash coreutils sort

考虑以下输入进行排序:

cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM
Run Code Online (Sandbox Code Playgroud)

现在尝试运行 sort foo

在我的任何 linux 机器(gnu coreutils 版本 6.9-7.4)上尝试此操作时,输出未排序。在 cygwin (gnu coretuils 8.5) 下运行时,输出已排序。注释?

eph*_*ent 19

排序取决于语言环境;具体来说,它取决于$LC_COLLATE(可能被 覆盖$LC_ALL),$LANG如果它不存在则回退。该命令locale将显示您正在有效使用哪些值。见man 3 strcollman 3 setlocale等等。

LC_COLLATE=C(或POSIX根本没有语言环境)导致严格的逐字节比较。

LC_COLLATE=en_US.utf8 结果是字母等价排序,标点符号被忽略并且同一等价类中的字符被同等对待。

  • 口音并没有完全被忽略。`Stephane` 排序 _before_ `Stéphane`,但 `Stephanie` 排序在 `Stéphane` 之后。`é` 等价于 `e`(如 `ê`、`ë`、`ẽ`...),但如果有平局,那么它们之间的顺序是明确定义的。在一本好的旧纸质词典中也是如此。 (4认同)