这个bug源自我的同学perypery,在和中文大战三百回合之后。。。
bug具体是这样的
  | 
  | 
然后sort -u test.txt,期望的输出肯定是
  | 
  | 
但是实际上
  | 
  | 
嗯?怎么回事?(哪里去了?
多版本验证以及降级时遇到的问题
sort来自于coreutils这个软件包,在8.13这个版本时还是好好的。。8.{20,21,22}均有这个问题。
于是我先下了一个8.13,打算降级回去,编译的时候发现gets()这个函数已经从stdio.h里面干掉了,编译器表示推荐使用fgets()。
猜想,是不是因为这个导致获取文本时出现了变化?这个变化使
(和)被识别成了同一个字符?
高版本的解决方案
经我的同学们调查,这个问题在这里也有提及。不仅仅sort,uniq也有这个问题。原因果然是被认成了同一个字符。。
不过我的shell内都设置了LANG=zh_CN.UTF-8。按理说不应该啊。。后来发现这个和shell的LOCALE没什么关系,要看Glibc用的是什么LOCALE。对应的就是LC_COLLATE这个变量。不过我把这个变量设置成zh_CN*都没有效果,设置成C(就是POSIX)以后倒是正常了。
所以目前的解决方案就是临时设置一下LC_COLLATE了。因为
The first rule of LC_COLLATE is: don’t use LC_COLLATE.
  | 
  |