unsetは変数や関数を解除するコマンドだ。
解除というのは、変数の中身をないものにするのではなく、変数自体をなかったものにするということに注意したい。
つまり変数x1に100という数値が設定されている場合、x1の値を0や空文字にするのではなく、変数x1自体を消去するということだ。
このページでは変数や関数を解除する方法を解説する。
目次
unsetコマンドの基本
コマンドの基本動作
使い方は、次のとおりだ。
$ unset 変数名
変数test1を解除する場合は、次のコマンドだ。
$ unset test1
はじめに変数test1の値を123と設定し、echoコマンドでその内容を確認すると123であることが表示された。
declareコマンドで変数test1を検索すると値が123として登録されていることがわかる。
次にunsetコマンドで変数test1を削除した。
unsetコマンド実行後にechoコマンドで変数test1の内容を確認すると、何も表示されなくなった。
declareコマンドで変数test1を検索しても登録自体がなくなっていることが確認できる。
unsetコマンドのオプションたち
オプションの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション -f
関数を削除する。
オプション -v
変数を削除する。
-fオプション:関数を削除する
明示的に関数を削除する書式は次のとおりだ。
$ unset -f 関数名
関数funcabcを解除する場合は、次のコマンドだ。
$ unset -f funcabc
はじめに文字列abc123を表示する関数funcabcを設定し、動作させるとabc123が表示された。
declareコマンドで関数funcabcを検索すると値が123として登録されていることがわかる。
次にunsetコマンドの-fオプションで関数funcabcを削除した。
unsetコマンド実行後にechoコマンドで関数funcabcの内容を確認すると、funcabcがないというメッセージが表示される。
declareコマンドで関数funcabcを検索しても関数の登録がなくなっていることが確認できる。
-vオプション:変数を削除する
明示的に変数を削除する書式は次のとおりだ。
$ unset -v 変数名 変数名
変数test2を解除する場合は、次のコマンドだ。
$ unset -v test2
はじめに変数test2の値を3500と設定し、echoコマンドでその内容を確認すると3500であることが表示された。
declareコマンドで変数test2を検索すると値が3500として登録されていることがわかる。
次にunsetコマンドで変数test2を削除した。
unsetコマンド実行後にechoコマンドで変数test2の内容を確認すると、何も表示されなくなった。
declareコマンドで変数test2を検索しても登録自体がなくなっていることが確認できる。
unsetコマンドの使用例
読み取り専用の変数を削除しようとした場合
組み込みの環境変数などの変数は読み取り専用で、削除ができない。
unsetコマンドでこのような変数を削除した場合は、読み取り専用変数であるために削除できない旨のメッセージが表示され、削除は行われない。
例えばプロセスIDの環境変数PPIDを削除する。
$ unset PPID
読み取り専用変数であるために削除できない旨のメッセージが表示された。
declareコマンドで変数PPIDを検索すると削除されていないことが確認できる。
同じ名前の変数と関数が存在している時
混乱するが、変数と関数は同じ名前で作成できる。
この状態でunsetコマンドをオプションなしで実行すると、変数が削除され、関数は残る。
はじめに値250が格納された変数VAR1Xを設定する。同じVAR1Xの名称でEASTと表示する関数を作成する。
そこでdeclareコマンドでVAR1Xを検索すると変数と関数の両方があることがわかる。
次にオプションなしのunsetコマンドでVAR1Xを削除する。
declareコマンドでVAR1Xを検索すると関数が存在し、250に設定された変数のVAR1Xが削除されたことがわかる。
このような混乱を避けるためにも-fオプション、-vオプションで明示的に指定すること、何より理由なく同じ名前で変数と関数を作成しないことが重要だ。
存在しない変数や関数を削除しようとする
存在しない変数や関数をunsetコマンドで削除しようとしても、特にエラーメッセージは表示されず、何も起こらない。
declareコマンドでVAR2Xを検索すると、変数も関数もないことがわかる。
そこで、オプションなしのunsetコマンド、-fオプション付きのunsetコマンド、-vオプション付きのunsetコマンドを実行するが、エラーメッセージの表示はない。
exportコマンドで作成した環境変数の削除
exportコマンドで環境変数を設定することができるが、この場合でもunsetコマンドで削除できる。
exportコマンドで値xyzの環境変数XYZIDを作成する。
declareコマンドでXYZIDを検索すると、値がxyzの環境変数XYZIDがあることがわかる。
unsetコマンドでXYZIDを削除する。
次にdeclareコマンドでXYZIDを検索すると、値がxyzの変数XYZIDがなくなっていることがわかる。
unset関連コマンド
最後にunsetコマンドに関連して、基本的な変数や関数を解除するコマンドも紹介しておく
declareコマンド
変数の値と属性を設定する。
exportコマンド
環境変数を設定する。
functionコマンド
関数を作成する。
grepコマンド
文字列を検索する。変数や関数名が設定されていないか検索するのに便利。
まとめ
Linuxのコマンドの中にsetコマンドがある。
unsetコマンドと対で考えてしまうが、setコマンドは、シェルのオプションを設定するコマンドで、変数や関数の設定をする関数ではないことに気を付けたい。
一度設定した変数や関数は不要であればシステムに余計な負荷をかけたり、誤動作を防いだりするためにもunsetコマンドで削除すべきだ。
関数や変数が存在するかどうかは、declareコマンドとgrepコマンドをパイプで繋いで調べてみよう。
Linuxコマンドの中でも使用頻度が高い関数なので、活用方法も含め、把握しておこう。
コメント