在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上试过这个。
感谢。
答案 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