使用相同输入的相同排序命令会在不同的计算机上生成不同的结果。我该如何解决这个问题?
答案 0 :(得分:20)
OS X上的man-page说:
*******警告*******环境指定的区域设置会影响排序顺序。设置LC_ALL = C得到 使用本机字节值的传统排序顺序。
可能会解释事情。
如果您的某些系统没有区域设置支持,它们将默认使用该区域设置(C),因此您不必在这些区域设置上设置它。如果您有一些支持区域设置并且想要相同的行为,请在这些系统上设置LC_ALL=C
。这将是让我知道的系统以同样的方式实现的方式。
如果您没有任何无语言环境的系统,只需确保它们共享语言环境就足够了。
有关更多规范信息,请参阅单个UNIX®规范,版本2 locale,environment variables,setlocale()的说明以及sort(1)实用程序的说明。< / p>
答案 1 :(得分:3)
这可能是区域设置差异的结果:
$ echo 'CO2_
CO_' | env LC_ALL=C sort
CO2_
CO_
$ echo 'CO2_
CO_' | env LC_ALL=en_US sort
CO_
CO2_
将LC_ALL环境变量设置为相同的值应该可以解决问题。
答案 2 :(得分:3)
这可能是由locale environment variables的不同设置造成的。 sort
将使用这些设置来确定如何比较字符串。通过在调用sort
之前按照您想要的方式设置这些环境变量,您应该能够强制它以一种特定的方式运行。
答案 3 :(得分:2)
如果您想了解sort
以上的内容,请阅读specification of sort
中的Single Unix Specification v3。它声明
比较[...]应使用当前区域设置的整理顺序执行。
IOW,sort
排序的方式取决于运行脚本的环境的语言环境(语言)设置。