为什么不对每台计算机进行"排序"排序?

时间:2020-03-05 18:43:30  来源:igfitidea点击:

在相同的输入上使用相同的sort命令会在不同的机器上产生不同的结果。我该如何解决?

解决方案

回答

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

$ 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"之前以所需的方式设置这些环境变量,我们应该能够强制其以一种特定的方式运行。

回答

OS X上的手册页显示:

*******  WARNING ******* The locale specified by the environment affects sort order.  Set LC_ALL=C to get
  the traditional sort order that uses native byte values.

也许可以解释一些事情。

如果某些系统不支持语言环境,则它们将默认为该语言环境(C),因此我们不必在这些语言环境上进行设置。如果我们有一些支持语言环境并希望具有相同行为的计算机,请在这些系统上设置LC_ALL = C。这将是我拥有尽可能多的系统以相同方式进行操作的方式。

如果我们没有任何无语言环境的系统,只需确保它们共享语言环境就足够了。

有关更多规范信息,请参见《单一UNIX?规范,版本2的语言环境,环境变量,setlocale()的描述以及sort(1)实用工具的描述。

回答

要了解有关sort的更多信息,请阅读Single Unix Specification v3中的sort规范。它指出

Comparisons [...] shall be performed using the collating sequence of the current locale.

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