「POSIXロケールで」とはどういう意味ですか?

「POSIXロケールで」とはどういう意味ですか?

存在するこの問題コメントはこう述べています。

これらすべては、「POSIXロケールで」が何を意味するのか理解していないことから来ています。 (-: ギリシャ語の小文字を (例:) sed および [[:lower:]] と便利な el_GR.UTF-8 ロケールと一致させるように努力する必要があります。 – JdeBP

それでは、「POSIXロケールで」とはどういう意味ですか?

ボーナス:C以外のロケールのPOSIXでも機能しますか?

LC_ALL=C grep '[[:lower:]]' file

答え1

POSIXが("on")と言うとき

POSIX ロケールでは、以下のみ可能です。

ABCDEFGHIJKLMNOPQRSTU VWXYZ

以下を含める必要があります。

POSIX ロケールを定義します。つまり、POSIXロケールのコンテキストでは、「親」文字クラスにはリストされている文字のみが含まれます。

POSIXは他のロケールを定義しませんが、システムでは自由に定義できます。したがって、grep '[[:lower:]]' filePOSIXのみに制限すると、POSIX以外のロケールで役に立つ操作を実行できなくなります。ただし、多くのシステムでは、異なるロケールとその文字クラスを定義しています。たとえば、GNU Cライブラリロケールを使用するシステムでは、

$ echo 'α' | LC_ALL=el_GR.UTF-8 grep '[[:lower:]]'
α

(これはel_GR.UTF-8ロケールが利用可能であると仮定しています。Debian派生バージョンでは、これを確認する簡単な方法はパッケージをインストールすることですlocales-all。)

答え2

あなたの提案(他の質問)を完全に理解していません。ところで、ユースケースを間違って理解しているようです。POSIX ロケール

あなたの提案はロケールがあまり良くないようです。ユーザーおなじみ。そしてこれを達成するには適応する必要があります。しかし、ユーザーフレンドリーであることはposix localのポイントではありません。それは異なるルールを持つ別のロケールの使命です。

posix ローカルは期待どおりに動作します。実際、単純さの利点もあります。他の言語を標準に統合し始めると中断しにくく、結果的にメンテナンスが多く、実装が難しい標準になります。

開発者として、すべての言語のすべてのルールを知り、ルールを「アルファベット順」にソートする方法を知り、実際には何が大文字か小文字かを知ることは不可能です。英語以外の言語のルールは本当に複雑です。したがって、他のすべての言語のルールを含むようにPosixローカルを調整すると、実際にその動作を予測できなくなります。

posixロケールを変更すると、実際に古いシステムの動作が新しいシステムの動作と一致しないソフトウェアが破損する可能性があります。 (下記のエピソードを参照)


逸話

私が見たバグの中で最もあいまいで診断するのが難しいバグの1つは次のとおりです。ETLツール行を「ランダムに」削除します。厳しい分析の最後に、ソフトウェアが正常に機能しているがLC_COLLATE = Cで実行している場合にのみ機能することがわかりました。これは、レコードを照合するときに、独自の内部ソート順序と一致するデータベースのソート順序に依存するためです。開発者は、一部のロケールでは、数字が「-1、-2、1、2」ではなく「0、-1、1、-2、2」のアルファベット順にテキストを並べ替えることを認識していません。

ユーザの対話に加えて、これは、システムがすべてのシステムに共通して適用される予測可能な方法で動作しなければならないことを示している。

関連情報