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

在相同的input中使用相同的sorting命令会在不同的机器上产生不同的结果。 我如何解决这个问题?

OS X上的手册说:

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

这可能解释一些事情。

如果你的一些系统没有语言环境支持,他们将默认使用该语言环境(C),所以你不需要在那些语言环境中设置它。 如果您有一些支持语言环境并希望具有相同的行为,请在这些系统上设置LC_ALL=C 就像我所知道的那样,采用同样的方式,就可以拥有尽可能多的系统。

如果你没有任何locale-less的系统,只要确保它们共享locale就足够了。

有关更多规范化信息,请参阅“单一UNIX®规范”,“ 语言 环境的第2版​​说明”, 环境变量 , setlocale()以及sort(1)实用程序的说明。

这可能是语言环境差异的结果:

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

将LC_ALL环境变量设置为相同的值应该可以解决问题。

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

对于比你想了解的sort ,请阅读Single Unix Specification v3中 的sort 规范 。 它指出

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

IOW, sort方式取决于脚本运行环境的语言环境(语言)设置。