同じ入力で同じ並べ替えコマンドを使用すると、異なるマシンでは異なる結果が生成されます。どうすれば修正できますか?
4 に答える
OS Xのマンページには次のように書かれています:
******** 警告 ******** 環境によって指定されたロケールは、ソート順に影響します。ネイティブのバイト値を使用する従来のソート順を取得するには、LC_ALL=C を設定します。
それは物事を説明するかもしれません。
一部のシステムでロケールがサポートされていない場合、デフォルトでそのロケール (C) が使用されるため、それらに設定する必要はありません。ロケールをサポートしていて同じ動作が必要な場合はLC_ALL=C
、それらのシステムで設定します。それは、私が知っている限り多くのシステムが同じ方法で行う方法です。
ロケールのないシステムがない場合は、ロケールを共有していることを確認するだけでおそらく十分でしょう。
正規の情報については、 The Single UNIX ® Specification, Version 2 のlocale、environment variables、setlocale()の説明、およびsort(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
ことで、特定の方法で動作させることができます。
これまで知りたかった以上のことについては、Single UnixSpecificationv3の仕様をsort
お読みください。それは述べていますsort
比較[...]は、現在のロケールの照合シーケンスを使用して実行されます。
IOW、並べ替え方法sort
は、スクリプトが実行されている環境のロケール(言語)設定によって異なります。