在相同的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
方式取决于脚本运行环境的语言环境(语言)设置。