Answers:
覆盖整理顺序。
echo -e "c\nb\nB\na" | LC_COLLATE=C sort
C.UTF-8
语言环境(LC_COLLATE=C.UTF-8
)将区分大小写,而“正常”对待非ascoi UTF-8字符。不幸的是,它在glibc的上游不可用,只有Debian,Ubuntu及其衍生产品才进行了修补。
有趣的是,还有另一个排序顺序,如下所示:
echo -e "c\nb\nB\na" | LC_COLLATE=C sort --ignore-case
它将大写字母放在其对应的小写字母之前。
这是在en_US.UTF-8
区域设置中它们输出的比较(我添加了“ d”和“ D”)(除非被覆盖):
echo -e "d\nD\nc\nb\nB\na" | sort
echo -e "d\nD\nc\nb\nB\na" | sort --ignore-case
echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort
echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort --ignore-case
输出:
1 2 3 4
- - - -
a a B a
b b D B
B B a b
c c b c
d d c D
D D d d
sort
v5.93
(OS X 10.9.3(!)附带)中看到了这种现象v8.13
,而在v8.21
和中却没有v8.22
。我猜2.和4.的结果仍然可以认为是等效的(但是随着外来字符的添加,这显然会改变)。
echo $'B\nÄ\nb\na' | LC_COLLATE=C sort
。sort
具有非C
语言环境的GNU 总是执行不区分大小写的排序不是一个错误吗?