どーも!marusukeです!
Linuxのシェル変数と環境変数の違いについて簡潔に説明します!
この記事の対象者
- Linux勉強中で、シェル変数と環境変数の違いを簡単に知りたい人
参考文献
- 三宅 英明,大角 祐介. 新しいLinuxの教科書
- 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
シェル変数と環境変数の違いとは?
参照できる範囲が異なります。
シェル変数=>今のログインしているシェルのユーザー
環境変数 =>同じコンピュータ内にログインした全てのユーザー
違いを体感してみる
文字だけだとわからないので、実際にLinuxで体感してみましょう。
シェル変数を登録する
シェル変数を登録する方法は、<シェル変数名>=<変数に設定する値>です。
TEST='shell hensu'
ちなみに<変数に設定する値>にスペースが入る場合は、 ‘ ‘ や ” ” で囲む必要があります。
登録したシェル変数を表示してみる
登録したシェル変数を表示するには、set | grep 変数名 です。
ちなみにsetコマンドは、現在のシェルのシェル変数と環境変数を全て表示します。
set | grep TEST
TEST='shell hensu'
TEST=’shell hensu’という結果が返ってきます。
ちなみにsetの後ろの「 | grep TEST」は、TESTと一致するものだけを表示するという意味です。
別のシェルから登録したシェル変数を確認してみる
現在のシェルで、もう一階層深いbashへログインします。bashと入力します。
bash
コマンドライン上は何も変わりませんが、今より一つ深い階層のシェルにログインしました。
(参考までに「echo $SHLVL」で、今いるのシェルの階層がわかります。)
ここで、先ほど設定したシェル変数TESTを呼び出します。
set | grep TEST
# 何も表示されません
exitコマンドで、元のシェルの階層に戻って、再度シェル変数TESTを表示させます。
exit
set | grep TEST
TEST='shell hensu'
このようにシェル変数は登録したシェル以外からは参照することができません。
登録した環境変数で試してみる
今度は、環境変数を登録し、別のシェルから表示させることができるかを試してみます。
まず、環境変数を設定します。
exportコマンドで
export <環境変数名>=<変数に設定する値>
で設定することができます。
export TEST2='env hensu'
こちらも<変数に設定する値>にスペースがある場合は、 ‘ ‘ や ” ” で囲む必要があります。
次に、登録した環境変数を表示してみます。printenvコマンドで表示できます。
printenv
HOSTNAME=bf1b22c5d444
TERM=xterm
LS_COLORS=rs=0:di=01;34:...長いので割愛します。
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
HOME=/root
TEST2=env hensu
_=/usr/bin/printenv
自分の環境の場合(dockerコンテナのcentos7内、bashシェルログイン時)だと、上記にように表示され、
登録した環境変数が、TEST2=env hensuのように表示されました。
(参考までに、SHLVL=1が現在のシェルの階層の深さです。)
次にシェルを一つ深い階層に移動します。先ほどと同様にbashと入力します。
bash
そして、環境変数をprintenvコマンドで表示させます。
printenv
HOSTNAME=bf1b22c5d444
TERM=xterm
LS_COLORS=rs=0:di=01;34:...長いので割愛します。
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
HOME=/root
SHLVL=2
TEST2=env hensu
_=/usr/bin/printenv
TEST2=env hensuのように表示させることができ、異なるシェル階層からでも参照することができました。
(シェル階層は、SHLVL=2となっており、一つ深い階層になっています。)
これで、以下のことがなんとなく体感できたと思います。
シェル変数 => 今いるシェルからだけ参照可能
環境変数 => どのシェルでも参照可能
ここまで読んでいただきありがとうございました!
コメント