export シェル変数を環境変数にして、子プロセスへ引き継ぐ
export [オプション] [名前[=値]...]試してみる
export NAME=utte; env | grep '^NAME='変数を設定して、環境変数にします。env の出力に現れることで確認できます。
GREETING=hi; ./show.shexport しない変数は、子プロセス(スクリプト)に渡りません。
export GREETING=hi; ./show.shexport した変数は、子プロセスにも渡ります。
GREETING=hello ./show.shコマンドの直前に書くと、そのコマンドの間だけ環境変数になります。
export PATH="$PATH:/opt/bin"; echo "$PATH" | tr ':' '\n' | tail -n 1PATH に追加します。tr で1行ずつ分けて、最後に追加されたことを見ます。
export TMPV=1; export -n TMPV; env | grep -q '^TMPV=' || echo 'not exported'-n で、環境変数から外します。値は残りますが、子には渡らないので、env には現れません。
主なオプション
-p | export されている変数の一覧を、再入力できる形で表示する |
|---|---|
-n | 変数の export を取り消す(値は残る) |
-f | 変数ではなく、関数を export する |
解説
シェル変数と環境変数
NAME=value で作った変数は、そのシェルの中でだけ見えます。export すると環境変数になり、そのシェルから起動したコマンドやスクリプト(子プロセス)にも引き継がれます。
書き方
export NAME=value のように、設定と同時にできます。すでにある変数に対して export NAME だけでもできます。値に空白を含むときは、export MSG="hello world" のように、引用符で囲みます。
親には戻らない
環境変数が引き継がれるのは、親から子への一方向だけです。スクリプトの中で変数を変えても、呼び出し元のシェルには反映されません。反映させたいときは、source script.sh(または . script.sh)で、同じシェルの中で実行します。
永続化
export は、そのシェルを閉じると消えます。ログインのたびに設定したいときは、~/.bashrc や ~/.profile に書きます。
一覧の確認
引数なしの export、または export -p で、export 済みの変数を一覧できます。export は bash の組み込みコマンドなので、独立したコマンドファイルはありません。