为什么 **sort** 不在每台机器上进行相同的排序?
题
使用相同的 种类 具有相同输入的命令在不同的机器上产生不同的结果。我该如何解决这个问题?
解决方案
这 手册页 在 OS X 上说:
****** 警告 ****** 环境指定的区域设置会影响排序顺序。设置LC_ALL = C获取使用本机字节值的传统排序顺序。
这或许可以解释一些事情。
如果您的某些系统没有区域设置支持,它们将默认为该区域设置 (C),因此您不必在这些系统上进行设置。如果您有一些支持区域设置并想要相同的行为,请设置 LC_ALL=C
在这些系统上。这将是让我所知道的尽可能多的系统都以同样的方式进行的方式。
如果您没有任何无区域设置的系统,只需确保它们共享区域设置可能就足够了。
有关更多规范信息,请参阅 The Single UNIX ® 规范,版本 2 的描述 语言环境, 环境变量, 设置语言环境() 以及描述 排序(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
在里面 单一 Unix 规范 v3. 。它指出
比较[...]应使用当前语言环境的整理顺序来执行。
哇哦,怎么样 sort
排序取决于脚本运行环境的区域设置(语言)设置。
不隶属于 StackOverflow