为什么不对每台计算机进行"排序"排序?
时间: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的排序方式取决于脚本所运行的环境的语言环境(语言)设置。