unix把“字符”(短划线)看成是不可见的

用行(aa ac ab)unixsorting的文件(aa ab ac)而不是预期的(ab a ac)

就好像sorting忽略了' – '字符一样。

有趣的是,破折号本身被正确sorting(abc – )sorting为( – abc)。

为什么? 无论如何改变这种行为?

sort(1)的sorting顺序行为是由您的语言环境设置(请参阅man locale )控制的。

有许多不同的区域设置,例如:

 $ locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" ... LC_ALL= 

要select所需的sorting行为,您需要select正确的LC_COLLATE值。 在这种情况下,build立在C(POSIX)语言环境中的标准是适用的:

 $ sort testcase aa ab ac $ LC_COLLATE=C sort testcase ab aa ac 

如果您愿意,可以通过设置LC_ALL = C来设置所有语言环境设置(从而更加一致)。 由于这些是环境variables,因此可以在shell启动脚本中使用export LC_ALL=C或类似方法永久设置sorting顺序。

设置环境variablesLC_ALL = C改变sorting的行为。 默认的语言环境sorting顺序必须特别对待“ – ”。