はじめに
これまでの実験では、User などの既存の変数を確認しました。ここでは、自分で「付箋」のような変数を作成してみましょう。
変数とは、テキストを保持する名前です。
ただし、変数を作成しただけでは、現在のシェルからしか利用できないローカル変数です。ほかのプログラムと共有するには、変数を「エクスポート」する必要があります。
シェル変数と環境変数の違いは、このモジュールの重要なポイントの 1 つです。すべての変数が、自動的に子プロセスから見える環境の一部になるわけではありません。
この実験では、次の操作を行います。
MYCAFE変数を作成する- 変数の内容を読み取る
- 変数を「エクスポート」する
- 2 つ目のシェルで変数が利用できることを確認する
変数を作成する
MYCAFE という変数を作成し、"espresso" を設定します。
変数の作成は、付箋にメモを書くようなものです。
次のコマンドを実行します。
MYCAFE="espresso"
重要:= の前後にスペースを入れないでください。
- 正しい例:
MYCAFE="espresso" - 間違った例:
MYCAFE = "espresso"
スペースを入れると、シェルは MYCAFE をコマンドとして解釈します。
これは、シェルの構文が空白に影響されることを示すよい例です。シェルでは、スペースは単なる見た目の書式ではありません。多くの場合、スペースによって単語や引数が区切られ、その区切りに意味があります。
変数を表示する
変数に値が保存されていることを確認します。
値にアクセスするには、ドル記号 $ を使います。
次のコマンドを実行します。
echo $MYCAFE
出力:
espresso
$ を省略すると、echo は単に MYCAFE という文字列を表示します。
変数をエクスポートする
現時点で、MYCAFE はローカル変数です。自分だけが使うノートに書かれたメモのようなものです。
ほかのプログラムと共有するには、変数をエクスポートする必要があります。エクスポートすると、変数は環境変数になります。掲示板に貼り出すようなものです。
エクスポートは、シェルに「子プログラムを起動するとき、この変数も含めてください」と伝える操作だと考えることができます。エクスポートしなければ、値は現在のシェル内だけにとどまります。
次のコマンドを実行します。
export MYCAFE
これで、現在のシェルから起動するプログラムに MYCAFE が渡されます。
子シェルでテストする
「子」シェルを起動して、正しく動作することを確認します。
- 新しい
bashセッションを開始します。
bash
これで、新しいシェルプロセスの中に入ります。
MYCAFEが認識されているか確認します。
echo $MYCAFE
出力:
espresso
正しく動作しています。子シェルが値を継承しました。
ここで重要なのが「継承」です。子プロセスは、多くの場合、親プロセスの環境のコピーを使って開始されます。そのため、エクスポートした変数は、スクリプトやコマンドにコンテキストを渡す一般的な方法です。
- 子シェルを終了して、親シェルに戻ります。
exit
まとめ
この実験では、変数のライフサイクルを練習しました。
- 作成:
MYCAFE="espresso"(スペースを入れない) - 読み取り:
echo $MYCAFE($を忘れない) - 共有:
export MYCAFE(子プロセスから利用できるようにする)
この仕組みは、ログインする前にシステムが環境(PATH、USER など)を設定するときにも使われています。



