Lから始まるLinux

3章17話
readonlyコマンド
3章18話 exportコマンド
もくじ
3章19話
envコマンド
export コマンド
若木 みどり
お兄ちゃん! シェルで宣言した変数が シェルスクリプトで使えないんだ! PATH 変数とかは使えるのにどうして?
若木 しげる
PATH のような変数を 「環境変数(environment variable)」と呼ぶよ 変数と環境変数は役割は同じだけど 影響範囲が違っているんだ
若木 みどり
環境変数を知れば PATH 変数のような 使い方ができる ということなんだね?
若木 しげる
そういうことだね 今回は環境変数の 使い方を学ぼう!
使い方
若木 しげる
export 環境変数を 宣言するよ
export [オプション]... [変数名[=値]]...
若木 しげる
変数は宣言されたシェルでのみ有効だけど環境変数は宣言されたシェルとその子プロセスで有効だよ!
若木 みどり
シェルで「変数」を宣言したからシェルの子プロセスであるシェルスクリプトではその変数が使えなかったんだね
若木 みどり
一方、シェルで「環境変数」を宣言すればそこで実行したコマンドやシェルスクリプトはその環境変数を読み取れるんだね!
若木 しげる
そのとおり!
実践
若木 みどり
自分で定義する環境変数が設定されている前提で動くスクリプトはなんか嫌だなぁ…いざ使おうとするとどう使ってよいか迷うね
若木 しげる
みどりの感覚は正しいよ環境変数が無くても動くけどあるとそれに従うような内容がいいね
若木 みどり
以前作った greet スクリプトで環境変数を使うようにしてみたよこんなのはどうだろう?
#!/bin/bash

if [ -z "$NAME" ]
then
  echo -n "名前を入力して下さい: "
  read NAME
fi
echo "こんにちは、$NAMEさん!"
若木 しげる(笑顔)
いい内容だね!
若木 しげる
NAME 環境変数が設定されていなければ名前の入力を求めてNAME 変数に代入して名前を表示しNAME 環境変数が設定されていれば名前の入力を求めずその名前を表示するんだね
若木 みどり(笑顔)
えへへ…そういうことです
若木 しげる
では変数と環境変数の違いを見るために最初は普通の変数を宣言して実行してみよう!
若木 みどり
うん!
NAME=みどり
若木 みどり
この状態でgreet スクリプトを実行するね!
./greet
名前を入力して下さい: 
若木 みどり
名前の入力が求められたねNAME 変数はgreet スクリプトでは使われていないね
名前を入力して下さい: みどり
こんにちは、みどりさん!
若木 しげる
次は NAME 変数を環境変数にしよう!
export NAME
若木 みどり
今度は環境変数が設定されている状態で実行してみるね
./greet
こんにちは、みどりさん!
若木 みどり
予想どおり!名前をたずねられずに挨拶されたよ!
確認
若木 しげる
export引数なしで実行すると現在定義されている環境変数一覧を表示してくれるよ
export
若木 みどり
「環境変数」だけを表示してくれるんだね!確認したい場合は引数なしで実行するよ!
まとめ
若木 みどり
今回は環境変数を学んだよ!export で環境変数を定義したり確認できるよ!
呼び名使える範囲
変数宣言されたシェルのみ
環境変数宣言されたシェルとその子プロセス
若木 しげる
一部のコマンドは環境変数で動作が変わるよこの説明は manpage の末尾に書いてあるでman で確認しよう