環境変数とは?
環境変数の簡単なイメージは「ショートカット」です。
デスクトップにあるアイコンはアプリケーションのパスが関連づけられています。例えばデスクトップにあるfirefoxのショートカットはリンク先にfirefox.exeが設定されています。
firefox = C:\Program Files\Mozilla Firefox\firefox.exe のようにfirefoxという文字の入れ物に「C:\Program Files\Mozilla Firefox\firefox.exe」のパスが入っているような感じです。
このfirefoxをOS上に登録すれば(環境変数)、Bashでfirefoxと打てば~/firefox.exeを実行することができます。
windowsでも何かのアプリの設定で「環境変数のPATHに設定する」と書いてあって設定したことがある人もいるとも思います。例えばpythonをインストールしたときにコマンドプロンプトで「python」と打つと環境変数のPATHを設定しないとpythonは起動しませんが環境変数PATHにパスを登録しておけばpythonと打てばプロンプト上でpythonが起動します。
環境変数の例
環境変数には、firefoxの例のようにパスを入れることもできますし、文字も入れられます。環境変数の「環境」とはパソコンの設定環境に関わる値が変数として設定されているからです。変数はデータの入れ物と考えてよいです。
環境変数の例として
- SHELL=/bin/bash bashのパス
- LANG=ja_JP.UTF-8 言語環境の設定値
- SHLVL=1 シェルの深度を表す設定値
- PATH=/usr/bin:/usr/sbin:/usr/local/bin……
などがあります。初期値でいろいろと設定されていますが、自分でも環境変数に値を設定して保存することもできます。
これらの環境変数を実行して確認するには$を付けて実行します。
# echo $PATH と入力すると環境変数の値がエコーで表示されます。
# echo PATH と入力してもエラーになって表示されません。
シェル変数と環境変数
環境変数に似たものとしてシェル変数というものがあります。これらの違いは
- シェル変数:実行中の一つのシェル内で有効な変数
- 環境変数:子プロセスに引き継げる変数、一つのユーザ内で有効な変数
です。すなわち変数の有効範囲が違います。環境変数のほうが範囲が広いです。シェル変数は一時的で開いているシェルを閉じたらその変数は使えなくなります。そのため、環境変数かシェル変数どちらを設定するか?によって変数が使える範囲が異なるので注意が必要です。
変数を参照するコマンド
環境変数を参照するコマンド
$ printenv
$ env
で設定されている環境変数を確認することができます。
また、setコマンドは環境変数に加えてシェル変数も確認することができます。
シェル変数・環境変数を定義するコマンド
自分でシェル変数や環境変数は設定することができます。設定するときはすでにその変数名が使われていないかをチェックしてから使用しましょう。
$ set | grep 設定したい変数名
何も表示されなければ使われていないので使用できます。
hogehoge=/home/komeyan/test
左側がシェル変数名=挟んで右側が値です。イコールの間にはスペースは入れません。
設定したシェル変数「hogehoge」を実行(ls $hogehoge)するとファイルの情報が表示されます。
設定した変数は
$ unset hogehoge
で削除できます。
環境変数を設定するときはexportコマンドを使います
$ export hogehoge=/home/komeyan/test
を実行すると変数は環境変数として設定されます。また、あらかじめ設定したシェル変数を環境変数として設定することも可能です。
$ export hogehoge
シェル変数・環境変数を使用する上での注意点
- すでに変数が使われていないかをset | grepで確認する
- 変数に使える文字列は英数字とアンダーバー「_」のみ
- シェル変数はシェルを閉じたり、別のシェルを立ち上げたりユーザー切り替え、再起動で使えなくなる
- 環境変数でもシェルの子プロセスで設定した環境変数は親プロセスでは使えない
- 変数は${HOME}というように{}で囲うのが基本
参考
1) https://qiita.com/kure/items/f76d8242b97280a247a1
2) https://wa3.i-3-i.info/diff333hensu.html