No.016シェル
unset
アンセット・変数・関数定義解除
変数または関数の定義を削除します。値を空にするのではなく、存在そのものを外したい時に使います。
答えよく使う形
注意危険度は低いですが、PATHやLANGなど重要な環境変数をunsetすると、その後のコマンド探索や表示挙動が変わることがあります。
$ demo=abc
unset demo
printf "%sn" "${demo-未定義}"
未定義
$ unset demo
$ unset -f myfunc
練習用の部屋です。何を打っても本物は変わりません。本物の Linux で続ける →
覚える順番の中でLPIC-1・49 駅め / 106
どんなコマンド?
不要になった変数を消したい時、空文字ではなく未定義状態に戻したい時、関数定義を解除したい時に使います。
unsetは、シェル変数や関数の定義を取り除く組み込みです。空文字列を代入するのとは異なり、その名前が未定義の状態になります。
例えば、export済みの変数を外す、スクリプトで使い回した補助変数を消す、同名関数を解除して素のコマンドを使う、といった場面で使います。set -uを有効にしている環境では、unset後の変数参照がエラーになるため、その影響も理解しておく必要があります。
書き方とオプション
組み立ててみるオプションを押すと、下の1行に足されます。もう一度押すと外れます。
$ unset
使用例と実行結果
行を押すとコピーできます。
未定義
まず安全に試す
3分ミッション
手を動かすと覚えやすくなります。できたものに印を付けてください(この端末に残ります)。
0 / 1
つまずいたとき
unsetした後に変数参照でエラーになった
原因set -uが有効なため、未定義変数参照がエラーになります。
こうする${var-既定値}の形式を使うか、参照前に定義確認します。
空文字にしたかったのに未定義になった
原因unsetは削除であり、空文字代入ではありません。
こうする空文字にしたいならvar=""を使います。
終わったときの数(戻り値)
$ echo $?
- 0要求した解除処理が成功しました。
- >0不正な名前やオプションなどのエラーが起きました。
気をつけることと入れ方
危険度は低いですが、PATHやLANGなど重要な環境変数をunsetすると、その後のコマンド探索や表示挙動が変わることがあります。
シェル(bash など)に組み込まれたコマンドです。入れるものはありません。
環境による違い
POSIXで定義されています。関数削除などの扱いはシェル差があるため、移植性が必要なら変数用途を中心に使うほうが無難です。
確かめた環境Debian GNU/Linux / 13 / Bash 5.2.372026-04-09 に確認
よくある質問
unsetとvar=""は何が違いますか。
unsetは未定義へ戻し、var=""は空文字を持つ定義済み変数にします。
資格試験では
- LinuC レベル1大事1.03.1 コマンドラインの操作
- LPIC-1大事105.1 シェル環境のカスタマイズと利用
- 共通基礎大事Linuxコマンド基礎
unset を最後まで読みました。
Linux コマンド辞典に戻る131 / 144