1.08.3標準
次の環境でdateが参照する日時カテゴリの有効値を判断する。
LANG=en_US.UTF-8
LC_TIME=ja_JP.UTF-8
LC_ALL=C有効になる値はどれか。
× 不正解
ロケールカテゴリはLC_ALL、対応するLC_*、LANGの順に優先され、この条件ではCになる。
詳細解説
誤り
en_US.UTF-8LANGは個別LC_*やLC_ALLがないカテゴリの既定値である。
LANGは最下位の既定値で、LC_TIMEとLC_ALLがある条件では採用されない。
誤り
ja_JP.UTF-8LC_TIMEはLANGより優先するが、LC_ALLには上書きされる。
LC_TIMEはLANGより強いが、さらに強いLC_ALL=Cに上書きされる。
正しい
CLC_ALLが全カテゴリで最優先される。
LC_ALL=Cが全カテゴリへ最優先で適用されるため、日時カテゴリもCになる。
誤り未定義になる
優先順位に従ってCを選べるため未定義ではない。
3変数は競合しても優先規則で解決でき、未定義にはならない。
実際に確かめる
一時的な検証環境で実行できる例です。
LANG=en_US.UTF-8 LC_TIME=ja_JP.UTF-8 LC_ALL=C locale LC_TIME期待される結果
C理解のポイント
- LC_ALL > LC_* > LANG
- カテゴリごとに評価
- LC_ALLは一括上書き
確認時の注意
- 確認環境: POSIX locale / 子プロセス環境だけ変更
基礎のおさらい
評価単位
プログラムは必要なカテゴリごとに、優先順位に従って有効ロケールを決める。
診断方法
locale LC_TIMEのようにカテゴリ名を渡すと、そのカテゴリの有効値を確認できる。
問題IDKL-102-1061
確認環境POSIX locale / 子プロセス環境だけ変更
最終技術確認2026-08-13
誤り・権利侵害を報告