105.1標準
names.txtをsortで処理する1回だけLC_ALL=Cを適用する。
現在のシェルのLC_ALLは変更しない。
適切なコマンドはどれか。
× 不正解
NAME=value COMMANDはその単純コマンドの環境へ一時的に値を渡す。現在シェルの同名変数を永続変更しない。
詳細解説
誤り
export LC_ALL=C; sort names.txt現在シェルにもexport済みLC_ALL=Cが残る。
誤り。sort終了後も現在シェルのLC_ALL=Cとexport属性が維持され、1回だけという条件に反する。
誤り
LC_ALL=C; sort names.txtシェル変数を現在環境で設定し、その後も定義が残る。
誤り。exportはしなくても現在シェルのLC_ALLがCとして定義されたまま残る。
誤り
sort LC_ALL=C names.txtLC_ALL=Cをsortのファイル引数として扱う。
誤り。代入はコマンド名より前に置く必要があり、この位置ではファイル名として解釈される。
正しい
LC_ALL=C sort names.txtコマンド前の代入をsortの環境だけへ適用する。
正しい。前置代入がsortプロセスの環境にだけ入り、コマンド後の親シェル状態を変えない。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'unset LC_ALL; LC_ALL=C sh -c '\''printf "child=%s\n" "$LC_ALL"'\''; printf "parent=%s\n" "${LC_ALL-unset}"'期待される結果
child=Cの後にparent=unset理解のポイント
- 代入をコマンド前へ置く
- 適用範囲は1コマンド
- 親シェルへ残らない
確認時の注意
- 確認環境: GNU Bash 5.2 / 一時子プロセス
基礎のおさらい
前置代入
NAME=value COMMANDは一時環境を作る構文で、env NAME=value COMMANDでも同様の目的を達成できる。
ロケール
LC_ALLは個別のLC_*やLANGより優先し、照合順やメッセージ等をまとめて制御する。
問題IDKP-105-607
確認環境GNU Bash 5.2 / 一時子プロセス
最終技術確認2026-08-13
誤り・権利侵害を報告