LoginSignup
2
2

More than 3 years have passed since last update.

シェル変数と環境変数の違い(bash)

Last updated at Posted at 2021-02-24

概要

シェル変数と環境変数について調べる機会があったので、
備忘録兼誰かの役に立てばと思い書きました。

環境変数

環境変数は、例えば「PATHを通す」のPATHがその一例です。
他にも

$ cd

で移動する先はHOMEという名前で環境変数として保存されていたりします。
そのようなもともと用意されている環境変数の他に、自分でも環境変数を設定することができます。

環境変数は以下のコマンドで確認することができます。

$ export

また、$環境変数とすればその値を取り出すこともできます。
試しに以下のようにコマンドを打てば、cd の行き先が表示されます。

$ echo $HOME

環境変数の追加は、例えば以下のように行うことができます。

export a=b

このコマンドを実行したあとにexportを実行すれば、aが環境変数として登録されていることが確認できるはずです。

※あとでコマンドはまとめてご紹介します。

シェル変数

同じ「変数」という字がついていますが、シェル変数は環境変数とは別物です。

例えばシェル変数は以下のように定義できます。

b=c

環境変数のときと同様に$bでその中身をとりだすことができるので

echo $b

とすれば、cと出力されます。
しかし、環境変数ではないので、exportを実行してもその一覧にbはいません。

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

では、環境変数とシェル変数は何が違うのかというと、スコープが違います。
(他にもあるかもしれませんが、とりあえず目についたものはこれだけでした)
具体的には、以下のような違いがあります。

環境変数:基本的に、親プロセスから子プロセスに引き継がれる。
シェル変数:基本的に、親プロセスから子プロセスには引き継がれない。

これは例えば以下のように確認できます。

$ c=shell_var
$ export d=env_var
bash
bash$ echo $c
bash$ echo $d
env_var
bash$ exit
exit
$ echo $c
shell_var
$ echo $d
env_var

ここではまず、シェル変数としてc、環境変数としてdを定義しています。
そのあと、bashをひらいて、その中でcとdの値を表示しようとすると、dの方は表示ができます。
次にexitコマンドでひらいたbashを閉じて元の場所に戻ってからcとdを表示すると、どちらも表示することができます。

このように、スコープが違うことが、性質として1つの違う点になります。

コマンド

性質としての違いは述べましたが、もちろん使用するコマンドも違っているので、最後にそのご紹介をします。

環境変数の確認

環境変数は以下の2つのコマンドどちらでも確認ができます。

$ export
$ env

しかし、envでは値を入れていない環境変数は表示されません。

環境変数とシェル変数の確認

以下の2つのコマンドは、環境変数もシェル変数もすべて表示されます。

$ set
$ declare

環境変数の定義

$ export a=b

以下のようにすると、aがすでにシェル変数の場合そのまま環境変数として定義でき、
もしそうでないなら、値は入れずに変数の定義だけ行うこともできます。

$ export a

シェル変数の定義

$ a=b
$ declare a=b

以下のようにすれば、値は入れずに変数の定義だけ行うこともできます。

$ declare a

環境変数とシェル変数の値の表示

$ echo $a

また、以下のようにしても、環境変数の値を表示することができます。

$ printenv a

環境変数とシェル変数の削除

$ unset a

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2