シェル変数と環境変数の違い

Linuxでよく耳にするシェル変数と環境変数について紹介します。

Linuxにおいてユーザー環境は、さまざまな変数によって定義されており、それぞれの変数にプログラムやシェルが利用する値が格納されています。

変数は、シェル変数と環境変数に分けられます。

シェル変数とは

シェル変数は、その定義した変数のシェル上のみ変数として扱われます。

当該のシェルを終了した場合、シェル変数が失われてしまいます。

どういうことなのか例を提示します。

シェル変数の作成は以下のように記述します。

$ var = HELLO

varは、変数名、=でつなげてHELLOは値に相当します。

もちろん変数名及び値は好きなように指定できます。

echoコマンドを用いて、変数varの内容を出力してみましょう。

$ echo $var
HELLO

しっかり定義されていることが確認されました。次に、新しいシェルを起動しましょう。

新しいシェルを起動する方法は、いくつかありますが、今回はbashコマンドを用います。

$ bash

その後、再度、変数varの内容を出力しましょう。

$ echo $var

内容が確認できませんでした。つまり、変数varは、定義されていないということです。

したがって、シェル変数は、定義したシェル上のみしか内容を参照できないというわけです。

環境変数とは

環境変数は、その変数を定義したシェル上、また当該のシェルが終了しても引き継がれます。

どういうことなのか例を提示します。

まずは、シェル変数のときと同様にシェル変数を定義します。

$ var = HELLO

説明は、シェル変数の際にしたので割愛します。

echoコマンドを用いて、変数varの内容を出力してみましょう。

$ echo $var
HELLO

しっかり定義されていることが確認されました。このままでは、シェル変数のままですので、環境変数に変換しましょう。

$ export var

exportコマンドを用いることでシェル変数から環境変数に変換できます。

また、変数を定義かつ環境変数に変換することを一文で記述することができます。

$ export var=HELLO

次に、新しいシェルを起動しましょう。

新しいシェルを起動する方法は、いくつかありますが、今回はbashコマンドを用います。

$ bash

その後、再度、変数varの内容を出力しましょう。

$ echo $var
HELLO

新しいシェルになっても変数を引き継いでいることが分かったかと思います。

変数の確認

setコマンドを実行するとシェル変数及び環境変数が表示されます。

$ set
BASH=/bin/bash
BASHOPTS=................

env、printenvコマンドで環境変数のみを表示させることも可能です。

$ env
XDG_SESSION_ID=23
HOSTNAME=hoge.example.com
SELINUX_ROLE_REQUESTED=..........

変数の削除

変数を削除するにはunsetコマンドを用います。

$ unset var

varには変数名を入れてください。

まとめ

シェル変数はその定義した変数のシェル上のみ変数として扱われます。

環境変数はその変数を定義したシェル上、また当該のシェルが終了しても変数として扱われます。

要は、変数の有効範囲が異なるのが相違点です。