为什么不对每台机器进行排序?

问题描述:

使用相同的输入排序在不同的机器上产生不同的结果。我如何解决这个问题?为什么不对每台机器进行排序?

在OS X上的man-page说:

*******警告*******环境指定语言环境将影响排序顺序。设置LC_ALL = C以获得使用本地字节值的传统排序顺序 。

这可能会解释一些事情。

如果您的某些系统没有语言环境支持,他们将默认使用该语言环境(C),因此您不必将其设置为那些语言环境。如果您有一些支持语言环境并且想要相同的行为,请在这些系统上设置LC_ALL=C。这就是我所知道的以同样的方式拥有尽可能多的系统的方法。

如果您没有任何无语言环境的系统,只要确保它们共享语言环境可能就足够了。

有关详细规范信息,请参阅单一UNIX®规范,版本2的localeenvironment variablessetlocale()描述和sort(1)效用的描述。

+1

如何设置语言环境为LC_ALL = C? – Malcolm 2012-02-07 17:23:51

这可能是区域差异的结果:

$ echo 'CO2_ 
CO_' | env LC_ALL=C sort 
CO2_ 
CO_ 


$ echo 'CO2_ 
CO_' | env LC_ALL=en_US sort 
CO_ 
CO2_ 

LC_ALL环境变量设置为相同的值应纠正问题。

这可能是由于locale environment variables的不同设置。 sort将使用这些设置来确定如何比较字符串。通过在调用sort之前以您想要的方式设置这些环境变量,您应该能够强制它以一种特定的方式运行。

想要知道更多关于sort的更多信息,请阅读Single Unix Specification v3中的specification of sort。它声明

应使用当前语言环境的排序顺序进行比较。

IOW,sort排序依赖于脚本运行环境的语言环境(语言)设置。