[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:09549] locale bug ? (Re: Re: mh-ja in potato-jp)
佐野@浜松です。
In article <19990614194810P.xlj06203@xxxxxxxxxxxxxxxxxxxx>
私:
> やっと原因がわかりました。bash の bug です。(bug-ja が動かなくなって
> いるのと同じ) LANG=ja_JP.ujis LC_ALL 設定無しだと [A-Z]* に 小文字が
> 全部反応してしまいます。LC_ALL=C または LC_ALL 設定無しで LANG=C と
> すればちゃんと [A-Z]* で大文字だけ反応します。
これって「bash の bug」というより、「glibc2.1 の locale に関する bug」
なんでしょうか。吉山さんや花高さんの作業に期待、なのかな ?
現在の環境は
ii libc6 2.1.1-10 GNU C Library: Shared libraries and timezone
ii ldso 1.9.11-2 The Linux dynamic linker, library and utilit
ii locale-ja 2.1.1.1 Locale definition files for Japanese.
ii locales 2.1.1-10 GNU C Library: National Language (locale) da
-- System Information
Debian Release: potato
Kernel Version: Linux yadon 2.2.9 #1 Fri Jun 11 14:20:32 JST 1999 i586 unknown
です。
確認するには
for i in a b c x y z A B C X Y Z;
do
case "$i" in
[A-Z]) echo "$i is capital";;
[a-z]) echo "$i is small";;
esac;
done
をファイルに保存して、 sh で実行してみてください。
例えば chk.sh という名前で保存して、 sh chk.sh を実行すると
$ /bin/sh ./chk.sh
a is capital
b is capital
c is capital
x is capital
y is capital
z is small
A is capital
B is capital
C is capital
X is capital
Y is capital
Z is capital
となります。(LANG=ja_JP.ujis とし、LC_ALL, LC_COLLATE は未設定)
最初のコマンド名を /bin/bash, bash, sh としても同様になります。
export LC_COLLATE=C とすれば
sh ./chk.sh
a is small
b is small
c is small
x is small
y is small
z is small
A is capital
B is capital
C is capital
X is capital
Y is capital
Z is capital
と期待される出力になります。
面白いことに、export LC_COLLATE=en_US の場合も
a is capital
b is capital
c is capital
x is capital
y is capital
z is small
A is capital
B is capital
C is capital
X is capital
Y is capital
Z is capital
となります。LANG=en_US, unset LC_COLLATE でも同様。
また export LC_COLLATE=japan とすると、上記の期待される出力に
なります。(存在しない locale 名は C に設定されるのだろうか)
それから、いったん LC_ALL=C, LC_COLLATE=C に設定して、
その後で unset すると、同じシェルの中ではその設定が維持される
ようです。現在 /etc/profile で
LANG=C
LC_COLLATE=C
LC_ALL=C
export LANG LC_COLLATE LC_ALL
unset LC_ALL LC_COLLATE
としてますが、この状態から export LANG=ja_JP.ujis しても
$ printenv |grep LC
$ printenv |grep LANG
LANG=ja_JP.ujis
$ . ./chk.sh
a is small
b is small
c is small
x is small
y is small
z is small
A is capital
B is capital
C is capital
X is capital
Y is capital
Z is capital
となり、正常動作となります。
とりあえず、export LC_COLLATE=C としておけば良いのかな、
という気もするんですが、これで本当に良いのかどうか、、、
--
#わたしのおうちは浜松市、「夜のお菓子」で有名さ。
<xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)