Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2869

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

$
0
0

概要

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

環境変数

環境変数は、例えば「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の値を表示しようとすると、cの方は表示ができます。
次に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

参考


Viewing all articles
Browse latest Browse all 2869

Trending Articles