105.1基礎
現在のBashに一時変数TMP_MODEが定義されている。
値を空文字へするのではなく、変数そのものを未定義にする。
適切なコマンドはどれか。
× 不正解
unset NAMEは変数または関数の定義を削除する。NAME=は空文字を持つ定義済み変数なので状態が異なる。
詳細解説
誤り
TMP_MODE=定義は残したまま値を空文字にする。
誤り。値の長さは0になるがTMP_MODEという変数は定義済みのままである。
誤り
export TMP_MODEexport属性を付け、未定義化しない。
誤り。現在値を子プロセスへ渡す属性を追加し、削除とは逆の効果になる。
正しい
unset TMP_MODE現在のシェルから変数定義を削除する。
正しい。unsetが変数表からTMP_MODEの定義を取り除き、-v判定でも未定義になる。
誤り
set TMP_MODE位置パラメータを設定する方向で、指定変数を削除しない。
誤り。TMP_MODEを位置パラメータ$1へ入れる方向で、同名シェル変数を削除しない。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'TMP_MODE=test; unset TMP_MODE; if [[ -v TMP_MODE ]]; then echo defined; else echo undefined; fi'期待される結果
undefined理解のポイント
- unsetは定義削除
- 空文字と未定義は別
- [[ -v NAME ]]で判定
確認時の注意
- 確認環境: GNU Bash 5.2 / 一時シェル
基礎のおさらい
パラメータ展開
${NAME-unset}等を使うと未定義と定義済み空文字を区別できる。
readonly
readonly変数は通常unsetできず、シェル終了まで保護される。
問題IDKP-105-606
確認環境GNU Bash 5.2 / 一時シェル
最終技術確認2026-08-13
誤り・権利侵害を報告