第2章:シェル変数

今度は、第2章ではシェル変数を学ぶ。

シェル変数の基本

  • シェル変数の名前には、大文字、小文字、数字、アンダースコアが使用可能。
  • 変数の最初が数字だけはダメ。
  • 慣習としてアルファベットの大文字を使う。
  • 変数にセットされた数字は、文字列として扱われる。
  • 宣言がいらない。
  • セットされていないものは、ヌル値がセットされている。

シェル変数の宣言

シェル変数を使う時は、$だけか、変数の文字を{}でくくってもいい。

$hoge

もしくは

${hoge}

普通は{}は使わないが、下記の時などは{}を使う。

$ FOO=abc
$ echo ${FOO}BAR
abcBAR

しかし、シェル変数に使えない文字列であれば{}を書かなくても処理ができる。下記の例は、/はシェル変数に使えないのでDIRを{}でくくらなくても大丈夫。

$DIR=/tmp
$ cd $DIR/work
$ pwd
/tmp/work

値がヌルの変数

シェル変数は通常、何か値をセットして宣言するのだが、値をセットしない変数を宣言することも可能。これをアンデファインド変数と言う。宣言の方法は以下の通り。

DIR=

もしくは

DIR=""

=によるシェル変数の設定

シェル変数の値をセットする方法は色々とある。すでに宣言され値がセットされているか、されていないかでセットする値を変えることができる。

$ echo ${XYZ:=123}
123
$ XYZ=xyz
$ echo ${XYZ:=123}
xyz

-によるシェル変数の設定

未使用のときは、変数に値をセットしない。

$ echo ${ABC:-xyz}
xyz
$ echo $ABC
$
$ echo ${ABC:=abc}
abc
$ echo $ABC
abc

?によるシェル変数の設定

?は、変数がこれまで未使用かどうかを確認するときに使用する。

$ echo ${ABC:?"ABC is not set"}
ABC is not set
$ ABC= abc
$ echo ${ABC:?"ABC is not set"}
abc

+によるシェル変数の設定

変数の値を変更せずに、そのときだけ結果を変えたい場合に利用する。

$ echo ${ABC:+aaa}

$ ABC=www
$ echo $ABC
www
$ echo ${ABC:+aaa}
$ echo $ABC
www

特殊な変数

特殊な変数として$?, $S, S!, S-の4つがあります。この変数は「書き込み禁止」です。以下のそれぞれの特徴を記載。

$?変数

$?は「コマンド終了時のステータス」を表す変数。ただし、&を使いバックグランドで実行させた場合には無効。通常、終了時には真(0)、異常終了(失敗)の時には偽(0以外)の値がセットされる。

$$変数

$$変数には、現在動作しているコマンドの「プロセスID」がセットされる。注意としては、中括弧でいくつかのコマンドを使って別のプロセスを起動した場合、$$変数の値は元のプロセスの値を引きづっている。

$!変数

&を使ってコマンドをバックグラウンドで走らせてたときに、そのコマンドのプロセスIDが$!にセットさせる。

$-変数

そのシェルの起動時のフラグやsetコマンドを使って設定したフラグの一覧がセットされる。
下記の例だと、/bin/sh -himBHで実行していると言うことになる。

$ echo $-
himBH

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界