
シェル変数
現在動作しているシェルでしか参照ができない変数です。
シェル変数を設定/確認するには?
下記のような構文でシェル変数は設定できます。
1 |
変数名=変数 |
また、確認は「set」コマンドで見ることができます。
例
削除
1 |
unset 変数名 |
登録したシェル変数を削除できます。
環境変数
現在動作しているシェルだけでなく、そのシェルで実行されるプログラムからも参照が可能な変数です。
環境変数を確認するには?
「env」コマンドを使います。
環境変数を設定するには?
「exportコマンド」を使います。
1 |
export 変数名=値 |
例
実際に環境変数に設定すると、下記のようにenvで閲覧ができることを確認できます。
環境変数を削除するには?
シェル変数同様に、unsetコマンドで削除することができます。
例
シェル変数を環境変数に変換することもできる。
exportコマンドを打てば、「シェル変数」を「環境変数」にそのまま変換することも可能です。
「シェル変数」と「環境変数」の違いを体感する。
シェル変数の場合
下記のように、「シェル変数」を設定した場合は他のシェルを起動した場合は、「シェル変数」が参照できなくなっています。
bashというコマンドが現在起動しているシェル(親プロセス)とは別のシェル(子プロセス)が起動している形になります。子から親のシェル変数は参照できないということですね。
環境変数の場合
別のシェルを起動したとしても、普通に環境変数の値を確認できます。
シェル変数と環境変数の使い分け
まずはシェル変数でなんとかならないか考えましょう。
それでもなんとかならないケースが存在する場合は仕方なしで環境変数を使うようにしましょう。
プログラミングやインフラ構築などどちらでもそうですが、不要にグローバルな変数は使わないようにする。変数のスコープはできるだけ小さく止めるということが大事です。(安易にグローバルな変数を使ってしまうと影響範囲調査などが大変になるのはインフラでも一緒です。)
そもそも、なぜ環境変数が存在するのか?
シェルが動いているときにホームディレクトリ、カレントディレクトリなどの情報を一時的に保持しておかなければなりません。
でないと我々がよく使っているlsでカレントディレクトリのファイル一覧が表示されたり、「cd ~」 でホームディレクトリに移動することはできません。
普段無意識に使っているコマンドなどで環境変数は活用されています。
この記事へのコメントはありません。