【问题标题】:Why doesn't **sort** sort the same on every machine?为什么 **sort** 在每台机器上的排序都不一样?
【发布时间】:2010-09-06 22:21:41
【问题描述】:

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

【问题讨论】:

    标签: bash unix sorting ksh


    【解决方案1】:

    OS X 上的man-page 表示:

    ******* 警告 ******* 环境指定的区域设置会影响排序顺序。设置 LC_ALL=C 得到 使用原生字节值的传统排序顺序。

    这可能会解释一些事情。

    如果您的某些系统不支持语言环境,它们将默认使用该语言环境 (C),因此您不必在这些系统上进行设置。如果您有一些支持语言环境并想要相同的行为,请在这些系统上设置LC_ALL=C。这将是让我所知道的尽可能多的系统都以相同方式执行此操作的方法。

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

    有关更多规范信息,请参阅 The Single UNIX ® Specification,第 2 版对localeenvironment variablessetlocale() 的描述和sort(1) 实用程序的描述。

    【讨论】:

    • 如何将语言环境设置为 LC_ALL=C ?
    • @Malcolm :许多建议会告诉您导出 LC_ALL 变量……但这会破坏用户的 shell 设置。请参阅我的回答 here 将其设置为设定范围
    【解决方案2】:

    这可能是地区差异的结果:

    $ echo 'CO2_
    CO_' | env LC_ALL=C sort
    CO2_
    CO_
    
    
    $ echo 'CO2_
    CO_' | env LC_ALL=en_US sort
    CO_
    CO2_
    

    将 LC_ALL 环境变量设置为相同的值应该可以解决问题。

    【讨论】:

      【解决方案3】:

      这可能是由于locale environment variables 的设置不同。 sort 将使用这些设置来确定如何比较字符串。通过在调用 sort 之前按照您想要的方式设置这些环境变量,您应该能够强制它以一种特定的方式运行。

      【讨论】:

        【解决方案4】:

        想了解更多关于sort 的信息,请阅读Single Unix Specification v3 中的specification of sort。它指出

        比较 [...] 应使用当前语言环境的整理顺序进行。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-19
          • 1970-01-01
          • 2020-11-21
          • 2016-02-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多