このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

シェル変数と環境変数の設定

 シェル変数は、シェル(コマンドラインインターフェース)で使用される一時的なデータ保存用の名前付きストレージといえます。

 シェル変数は現在のシェルセッション内でのみ有効で、セッション終了と共に消えます。一方、環境変数は現在のシェルとすべての子プロセスで有効です。シェル変数と環境変数を適切に使用することで、シェルスクリプトの効率性と柔軟性が向上します。

シェル変数の設定方法

項目説明サンプルコード
構文変数名=値MY_VAR="Hello World"
呼び出し方法変数の値を呼び出すには、変数名の前に「$」記号を付けるecho $MY_VAR
シェル変数の設定方法
# シェル変数の設定
MY_VAR="Hello World"
# 変数の値を呼び出す
echo $MY_VAR  # 出力: Hello World

環境変数の設定方法

項目説明
定義システムやプログラムの動作に影響を与える情報を含む変数。現在のシェルセッションおよびその子プロセスで使用される。
構文export 変数名=値
使用例export PATH="/usr/local/bin:$PATH"
環境変数とは
# 環境変数の設定
export MY_ENV_VAR="Hello Environment"
# 環境変数の値を呼び出す
echo $MY_ENV_VAR  # 出力: Hello Environment

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

項目シェル変数環境変数
スコープ定義されたシェル内でのみ有効シェルとその子プロセス全てで有効
設定方法変数名=値export 変数名=値
継承子プロセスに継承されない。子プロセスに継承される。
確認方法echo $変数名printenv または env コマンド
削除方法unset 変数名unset 変数名
シェル変数と環境変数の違い

コマンドの使用例と解説

1.シェル変数の設定

・「MY_VAR="Hello"」コマンドを実行します。

シェル変数「MY_VAR」を設定します。

user01@ubuntu-vm:~$ MY_VAR="Hello"
2.シェル変数の出力

・「echo $MY_VAR」コマンドを実行します。

シェル変数「MY_VAR」の値を出力します。

user01@ubuntu-vm:~$ echo $MY_VAR
Hello
3.環境変数の設定

・「export MY_ENV_VAR="Hi"コマンドを実行します。

環境変数「MY_ENV_VAR」を設定します。

user01@ubuntu-vm:~$ export MY_ENV_VAR="Hi"
4.環境変数の出力

・「echo $MY_ENV_VAR」コマンドを実行します。

環境変数「MY_ENV_VAR」の値を出力します。

user01@ubuntu-vm:~$ echo $MY_ENV_VAR
Hi
5.現在のシェルセッションで設定されている全ての環境変数を表示

・「printenv」コマンドを実行します。

現在のシェルセッションで設定されている全ての環境変数を表示します。

user01@ubuntu-vm:~$ printenv
SHELL=/bin/bash
(省略)
MY_ENV_VAR=Hi
(省略)
6.シェル変数と環境変数の違いを確認

新しいサブシェルを起動します。

・「bash」コマンドを実行します。

・「echo $MY_VAR」コマンドを実行します。

 シェル変数「MY_VAR」の値が出力されません。これは、シェル変数はそのシェル内でのみ有効で、子プロセスには継承されないからです。

・「echo $MY_ENV_VAR」コマンドを実行します。

 環境変数「$MY_ENV_VAR」の値が出力されます。これは、環境変数は子プロセスに継承されるからです。

サブシェルで環境変数を変更します。

・「MY_ENV_VAR=”env var change”」コマンドを実行します。

サブシェルを終了します。

・「exit」コマンドを実行します。

元のシェルに戻ります。

環境変数を表示します。

・「$ echo $MY_ENV_VAR」コマンドを実行します。

サブシェルで変更した値が反映されていません。

 ここで注意すべき点は、新しいシェルで環境変数の内容を書き換えても元のシェルでは反映されないということです。環境変数は、あくまで、新たに起動したシェルで引き続き利用される変数で、グローバル変数とは異なる性質を持ちます。

ここまでの入力と出力は以下のとおりです。

user01@ubuntu-vm:~$ bash # 新しいサブシェルの起動
user01@ubuntu-vm:~$ echo $MY_VAR # シェル変数の表示

user01@ubuntu-vm:~$ echo $MY_ENV_VAR # 環境変数の表示
Hi
user01@ubuntu-vm:~$  MY_ENV_VAR="env var change" # サブシェル内での環境変数の変更
user01@ubuntu-vm:~$ exit # サブシェルの変更
exit
user01@ubuntu-vm:~$ echo $MY_ENV_VAR # 元のシェルでの環境変数の出力
Hi
元シェルとサブシェルにおけるシェル変数と環境変数の違い

元シェルとサブシェルにおけるシェル変数と環境変数の違いを図にまとめます。

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

設定したシェル変数と環境変数を削除します。

次のコマンドを実行します。

  • unset MY_VAR」コマンド
  • unset MY_ENV_VAR」コマンド

シェル変数「MY_VAR」を削除して、環境変数「MY_ENV_VAR」を削除します。

user01@ubuntu-vm:~$ unset MY_VAR
user01@ubuntu-vm:~$ unset MY_ENV_VAR

まとめ

項目説明
シェル変数の設定方法変数名=値 で設定し、呼び出す際には「echo $変数名」を使用。 「unset 変数名」で削除。
環境変数の設定方法export 変数名=値」で設定し、呼び出す際には echo $変数名 を使用。「unset 変数名」で削除。
シェル変数と環境変数の違いシェル変数はそのシェル内でのみ有効、環境変数は子プロセスに継承される。
重要性必要に応じてシェル変数を設定し、システムやプログラムに影響を与える情報は環境変数として管理する。
シェル変数と環境変数のまとめ

この演習をとおして、シェル変数と環境変数の基本的な概念と設定方法が理解できたかと思います。