okuの日記: LANG=en_US sort 2
日記 by
oku
いつ頃からこうなっているのか知らないのですが、我が家の Gentoo linux な箱では、
$ echo 'A
a
b
B' | LANG=en_US sort
の結果は、
a
A
b
B
です(あまり「-f」に存在意義がない)。
多分、GNU coreutils-6.10 の sort が悪いわけではなくて、 strcoll(3C) が見ている先の LC_COLLATE の設定がどうかしてるせいではないかと思います。 それが証拠に、
$ echo 'A
a
b
B' | LANG=C sort
の結果は予想通り、
A
B
a
b
になりますし、
$ echo 'A
a
b
B' | LANG=C sort -f
の結果も予想通り、
A
a
B
b
となってくれます。
これ、困る人は相当いるのではないか?というわけで「en_US」以外の locale も試してみようと思ったのですが、我が家では「en_US*」と「ja_JP*」以外の locale を入れる習慣がないので、ちょっと手間暇が掛かりそうです。
辞書順 (スコア:1, 参考になる)
SunOSのマニュアルより。
Re:辞書順 (スコア:1)
へぇ~、こりゃ書いてみるものですね。 Solaris のドキュメントには確かにそう書かれているのを確認しました (POSIX の sort(1) manpage には書かれていないけど、筋論からいくと locale データベースの仕様に属する話だと思うので、書かれていない方が寧ろ当然か)。
手元で「en_GB」「fr_FR」の locale データベースを作って試してみたところ、「en_US」と同じように振舞いましたので、欧米人にとってはデフォルトで sort -fd みたいな振る舞いをしてくれた方が嬉しいということなのかしらん。 Cygwin [cygwin.com] みたいに真っ当に locale をサポートしてない環境と行ったり来たりしていると、間違いなくハマリそうな気がするんですけどねえ...