1.08.3基礎
現在のシェルのロケール設定を変更せず、sort names.txtの実行中だけ全カテゴリをCへ固定する。
適切なコマンドはどれか。
× 不正解
NAME=value COMMAND形式は、そのコマンドの環境だけへ値を渡し、親シェルの値を恒久変更しない。
詳細解説
誤り
export LC_ALL=C; sort names.txt現在のシェルへexportするため、後続コマンドにも影響する。
exportにより現在シェルの後続子プロセスにもLC_ALL=Cが継続して渡る。
誤り
sort LC_ALL=C names.txtLC_ALL=Cをsortのファイル引数として扱う。
コマンド名の後に置いたLC_ALL=Cは環境代入ではなく、sortが読むファイル名として扱われる。
誤り
LANG=C; sort names.txtシェル変数の代入を別コマンドとして行い、既存LC_*にも上書きされ得る。
代入を別の単純コマンドとして実行すると現在シェルの変数が変わり、既存LC_ALLにも勝てない。
正しい
LC_ALL=C sort names.txtコマンド前置き代入でsortプロセスだけへLC_ALL=Cを渡す。
sortの直前へLC_ALL=Cを置くと、その実行環境だけがCになり、親シェルは維持される。
実際に確かめる
一時的な検証環境で実行できる例です。
before=${LC_ALL-unset}; LC_ALL=C locale LC_ALL; printf '%s
' "${LC_ALL-unset}"期待される結果
Cの後に親シェル側の元の値理解のポイント
- 前置き代入はcommand scoped
- exportしない
- LC_ALLで全カテゴリ固定
確認時の注意
- 確認環境: POSIX shell / 親環境を変更しない
基礎のおさらい
一時環境
テストやスクリプトの一部だけ出力規則を固定するとき、前置き代入は副作用を狭くできる。
複数変数
VAR1=x VAR2=y commandのように複数の環境値を同じコマンドへ渡せる。
問題IDKL-102-1062
確認環境POSIX shell / 親環境を変更しない
最終技術確認2026-08-13
誤り・権利侵害を報告