シェル言語ではCやPASCAL等のプログラミング言語と異なりデータ型の概念 がなく、すべての変数は文字列として扱われます。使用する変数は前もって宣言す る必要がなく、シェルは新しい変数を見つけるとそれを登録し、ヌル値で初期化し ます。
シェル変数に格納されている値はシェル変数名の前にドル記号 $ を付けること で参照できます。シェルは $ の後ろに続く文字列が正しいシェル 変数名ならばその変数に格納されている値と置き換えます。何も格納されていないシェル 変数をいきなり参照した場合には初期値のヌルで置き換えられます。 1つの例を見てみましょう。シェル変数valに "nora" という値(文字列)を格納し、 echoコマンドでこれを表示させるには次のようにします。
$ val=nora最後のnoraはechoコマンドの出力です。このようにシェルは $valをその変数に格納さ れた内容と置き換えてからechoに引数として渡します。いま例に引いたvalを使い、 "nora_neko"と表示させようとする時には注意が必要です。
$ echo $val
nora
$ echo $val_nekoとするとシェルは "val" ではなく "val_neko "を変数名として処理します。これは、 シェル変数を表す $ に英数文字が続いているならば最も長い語句を変数名として 切り出すために起こります。 ここでシェル変数 "val_neko" は未定義ですからヌル値で置き換えられ何も表示されませ ん。 この不都合を回避するには中括弧
{
, }
でシェル変数部分
の範囲を明示してやります。
$ echo $シェル変数は一般の文字列以外にもメタ文字と呼ばれるシェルにとっては特殊な意味を もつ文字を格納することもできます。次の例を見てください。{
val}
_neko
nora_neko
$ val=*普通の文字列が格納されている時にはシェル変数 $valの値を展開するだけでしたが、 今度はもう少し手の込んだ仕事をしてきます。 シェルはコマンドラインに echo $val を受け取る とこれを走査して変数valを見つけ、その内容を変数valに格納されている * で置き換えます。この文字 * はシェルにとっては特別な意味を持つ文字 ですからカレントディレクトリ内の全ファイル名を引数としてechoを起動します。 この3つの例からシェルはどのように変数を評価しているかを理解してください。
$ echo $val
ここまでの説明で気が付いたと思いますが、環境変数はシェル変数そのものです。 シェルスクリプト内で使われる一般のシェル変数とは違い、ユーザの 使用環境を整えるために使われるので環境変数と呼ばれています。