考虑以下输入进行排序:
cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM
现在尝试运行 sort foo
在我的任何Linux机器上尝试对输出进行排序时(gnu coreutils 6.9-7.4版)。在cygwin(gnu coretuils 8.5)下运行时,输出进行排序。注释?
考虑以下输入进行排序:
cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM
现在尝试运行 sort foo
在我的任何Linux机器上尝试对输出进行排序时(gnu coreutils 6.9-7.4版)。在cygwin(gnu coretuils 8.5)下运行时,输出进行排序。注释?
Answers:
排序取决于语言环境;具体来说,它取决于$LC_COLLATE(可能被覆盖$LC_ALL),$LANG如果不存在,则回退至。该命令locale将显示有效使用的值。见man 3 strcoll,man 3 setlocale等等。
LC_COLLATE=C(或POSIX根本没有语言环境)会导致严格的逐字节比较。
LC_COLLATE=en_US.utf8 会产生字母对等排序,忽略标点符号,并且同等类中的字符将被平等对待。
Stephane排序前 Stéphane,但Stephanie排序后Stéphane。é相当于e(像ê,ë,ẽ...),但如果有一条领带,那么那些之间的顺序是明确界定。一部好的旧纸质词典也是如此。
export LC_COLLATE=C排序的行为符合预期