linux的sort命令的不寻常行为

时间:2011-05-03 11:01:24

标签: linux shell sorting

在Linux shell上,echo -e "arrays2 2\narrays 2\narrays3 2" | sort的结果是

arrays  2
arrays2 2
arrays3 2

echo -e "arrays2 28\narrays 28\narrays3 28" | sort的结果是

arrays2 28
arrays 28
arrays3 28

为什么在第二种情况下,字符串arrays2 28出现在第一行。 这是一个错误,还是我错过了什么?

我在RHEL4和Ubuntu 11.04上试过这个。

感谢。

2 个答案:

答案 0 :(得分:5)

行为依赖于语言环境:

echo -e "arrays2 28\narrays 28\narrays3 28" | LANG=C sort

打印

arrays 28
arrays2 28
arrays3 28

虽然

echo -e "arrays2 28\narrays 28\narrays3 28" | LANG=de_DE.UTF-8 sort

打印

arrays2 28
arrays 28
arrays3 28

(请注意,必须安装区域设置才能产生此效果,如果区域设置不存在,则行为将与LANG=C相同)。

答案 1 :(得分:2)

如果您将区域设置从en_US.utf8更改为旧的默认设置,它将按您期望的方式工作:

echo  -e "aaa\nfoo\narrays2 28\narrays 28\narrays3 28" | LC_ALL=C sort -
aaa
arrays 28
arrays2 28
arrays3 28
foo