考虑以下输入进行排序:
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-8.26)上尝试此操作时,输出未排序。我得到这个:
$ sort foo
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
显然,所有带有 的行都D,
应该在一起,并且-
应该位于任何字母之前。
在 Cygwin (GNU coreutils 8.5) 下运行时,输出已排序。评论?
答案1
排序取决于区域设置;具体来说,它取决于$LC_COLLATE
(可能被覆盖),如果它不存在则$LC_ALL
回退到。$LANG
该命令locale
将向您显示正在有效使用的值。看man 3 strcoll
,man 3 setlocale
, ETC。
LC_COLLATE=C
(或者POSIX
根本没有语言环境)会导致严格的逐字节比较。
LC_COLLATE=en_US.utf8
结果是按字母顺序进行等价排序,忽略标点符号并对同一等价类中的字符进行同等对待。