2008-08-26 9 views

答えて

20

OS X上のman-pageは言う:

******* WARNINGが環境で指定されたロケールがソート順に影響を与え*******。 LC_ALL = Cに設定すると、元のバイト値を使用する従来の並べ替え順が になります。

これは説明する可能性があります。

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

ロケールレスのシステムをお持ちでない場合は、ロケールを共有するだけで十分でしょう。

より多くの標準的な情報については、localeenvironment variablessetlocale()ザシングルUNIX®仕様、バージョン2の説明とsort(1)ユーティリティの説明を参照してください。

+1

ロケールをLC_ALL = Cに設定するにはどうすればよいですか? – Malcolm

+1

@Malcolm:多くの推奨事項ではLC_ALL変数をエクスポートするよう指示されていますが、これはユーザーのシェル設定を破壊します。私の答え[ここ](http://stackoverflow.com/questions/6923464/unix-sort-ignores-whitespaces/17180962#17180962)を参照して、セットスコープに設定してください – mateor

3

これは、ロケールの違いの結果であり得る:同じ値にLC_ALL環境変数を設定する

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


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

は、問題を修正する必要があります。

3

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

2

sortについてもっと知りたい場合は、Single Unix Specification v3specification of sortをお読みください。それは状態

現在のロケールの照合順序を使用して実行されるものとします。

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

関連する問題