103.1基礎
現在のBashではLAB_MODE=devである。
現在値を変えず、次の子BashだけでLAB_MODE=prodと表示する。
適切なコマンドはどれか。
× 不正解
単純コマンドの直前に置く変数代入は、そのコマンドへ渡す一時的な環境を作る。現在のシェル変数は保持される。
詳細解説
正しい
LAB_MODE=prod bash -c 'printf "%s\n" "$LAB_MODE"'コマンド前の代入は、そのコマンドの環境だけに適用される。
正解。代入語がコマンド名の前にあるため、子Bashの環境だけがprodになる。
誤り
export LAB_MODE=prod; bash -c 'printf "%s\n" "$LAB_MODE"'現在のBashのLAB_MODEもprodへ変更するため要件に合わない。
exportを現在のシェルで実行するため、親の値もprodへ変わる。
誤り
LAB_MODE=prod; bash -c 'printf "%s\n" "$LAB_MODE"'現在のBashの変数を変更し、exportされていなければ子Bashへも渡らない。
セミコロン前の代入は現在のシェルへ残り、未exportなら子へ継承されない。
誤り
bash -c 'printf "%s\n" "$LAB_MODE"' LAB_MODE=prod末尾の文字列は位置パラメータ$0となり、環境変数の代入にはならない。
末尾のLAB_MODE=prodは環境設定ではなくbash -cへ渡す引数になる。
実際に確かめる
一時的な検証環境で実行できる例です。
LAB_MODE=dev
LAB_MODE=prod bash -c 'printf "child=%s
" "$LAB_MODE"'
printf 'parent=%s
' "$LAB_MODE"期待される結果
child=prod
parent=dev理解のポイント
- コマンド前の変数代入
- 子プロセスの環境
- 親シェルの値の保持
確認時の注意
- 確認環境: Bash 5.2
基礎のおさらい
一時環境
外部コマンドの直前に置いた代入は、その実行環境だけへ適用できる。
永続する代入
代入だけの単純コマンドは現在のシェルを変更する。
問題IDKP-103-016
確認環境Bash 5.2
最終技術確認2026-08-12
誤り・権利侵害を報告