16

同じ入力で同じ並べ替えコマンドを使用すると、異なるマシンでは異なる結果が生成されます。どうすれば修正できますか?

4

4 に答える 4

23

OS Xのマンページには次のように書かれています:

******** 警告 ******** 環境によって指定されたロケールは、ソート順に影響します。ネイティブのバイト値を使用する従来のソート順を取得するには、LC_ALL=C を設定します。

それは物事を説明するかもしれません。

一部のシステムでロケールがサポートされていない場合、デフォルトでそのロケール (C) が使用されるため、それらに設定する必要はありません。ロケールをサポートしていて同じ動作が必要な場合はLC_ALL=C、それらのシステムで設定します。それは、私が知っている限り多くのシステムが同じ方法で行う方法です。

ロケールのないシステムがない場合は、ロケールを共有していることを確認するだけでおそらく十分でしょう。

正規の情報については、 The Single UNIX ® Specification, Version 2 のlocaleenvironment variablessetlocale()の説明、およびsort(1)ユーティリティの説明を参照してください。

于 2008-08-26T19:21:56.177 に答える
5

これは、ロケールの違いの結果である可能性があります。

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


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

LC_ALL 環境変数を同じ値に設定すると、問題が修正されます。

于 2008-08-26T19:19:31.157 に答える
3

これはおそらく、ロケール環境変数の設定が異なるためです。sortこれらの設定を使用して、文字列を比較する方法を決定します。を呼び出す前にこれらの環境変数を好きなように設定するsortことで、特定の方法で動作させることができます。

于 2008-08-26T19:21:42.977 に答える
2

これまで知りたかった以上のことについては、Single UnixSpecificationv3の仕様をsortお読みください。それは述べていますsort

比較[...]は、現在のロケールの照合シーケンスを使用して実行されます。

IOW、並べ替え方法sortは、スクリプトが実行されている環境のロケール(言語)設定によって異なります。

于 2008-08-27T01:25:42.137 に答える