No.016シェル

unset

アンセット・変数・関数定義解除

知識レベル 基礎注意一般ユーザーで使えるシェルに組み込み

変数または関数の定義を削除します。値を空にするのではなく、存在そのものを外したい時に使います。

答えよく使う形

  1. 空文字ではなく未定義へ戻ることを確認します
  2. 関数定義を解除します
  3. 変数を解除します

注意危険度は低いですが、PATHやLANGなど重要な環境変数をunsetすると、その後のコマンド探索や表示挙動が変わることがあります。

visitor@goodly: ~

$ demo=abc unset demo printf "%sn" "${demo-未定義}"

未定義

$ unset demo

$ unset -f myfunc

覚える順番の中で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

Goodly のメニュー