このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Linux】シェル変数と環境変数の設定
シェル変数と環境変数
シェル変数は、シェル(コマンドラインインターフェース)で使用される一時的なデータ保存用の名前付きストレージといえます。
シェル変数は現在のシェルセッション内でのみ有効で、セッション終了と共に消えます。一方、環境変数は現在のシェルとすべての子プロセスで有効です。シェル変数と環境変数を適切に使用することで、シェルスクリプトの効率性と柔軟性が向上します。
シェル変数の設定方法
項目 | 説明 | サンプルコード |
---|---|---|
構文 | 変数名=値 | 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 変数名 」で削除。 |
シェル変数と環境変数の違い | シェル変数はそのシェル内でのみ有効、環境変数は子プロセスに継承される。 |
重要性 | 必要に応じてシェル変数を設定し、システムやプログラムに影響を与える情報は環境変数として管理する。 |
この演習をとおして、シェル変数と環境変数の基本的な概念と設定方法が理解できたかと思います。