对相同的输入使用相同的排序命令会在不同的机器上产生不同的结果。我该如何解决?
4 回答
OS X 上的手册页说:
******* 警告 ******* 环境指定的区域设置会影响排序顺序。设置 LC_ALL=C 以获得使用本机字节值的传统排序顺序。
这可以解释事情。
如果您的某些系统不支持语言环境,它们将默认使用该语言环境 (C),因此您不必在这些系统上进行设置。如果您有一些支持语言环境并想要相同的行为,请LC_ALL=C
在这些系统上进行设置。这将是让我所知道的尽可能多的系统以同样的方式进行操作的方式。
如果您没有任何无语言环境的系统,只需确保它们共享语言环境就足够了。
有关更多规范信息,请参阅 The Single UNIX® Specification, Version 2 description of locale , environment variables , 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 环境变量设置为相同的值应该可以解决问题。
这可能是由于locale 环境变量的设置不同造成的。sort
将使用这些设置来确定如何比较字符串。通过在调用之前按照您想要的方式设置这些环境变量sort
,您应该能够强制它以一种特定的方式运行。
想了解更多信息sort
,请阅读Single Unix Specification v3中的规范sort
。它指出
比较 [...] 应使用当前语言环境的整理顺序进行。
IOW,sort
排序方式取决于脚本运行环境的语言环境(语言)设置。