UNIXシェルスクリプト第2章

シェル変数の初期設定

${variable:=value}

${variable=value}

値がある場合、そのままの値を利用する。

値がない場合、valueの値を代入する。

コロンがある場合は変数が未使用、もしくはヌル値がセットされているときに値がないとみなす。

コロンがなければ、変数が未使用の場合のみを値がないとみなす。

 

${variable:-value}

${variable-value}

値がある場合、そのままの値を利用する。

値がない場合、代入はせず、valueの値を利用する。

 

${variable:?message}

${variable?message}

値がある場合、そのままの値を代入する。

値がない場合、messageの部分が表示される。

message部分を省略すると、デフォルトのメッセージが表示される。

 

${variable:+value}

${variable+value}

値がある場合、代入はせず、valueの値を利用する。

値がない場合、何もしない。

 

$* と $@ の違い

$*        $1    $2    $3 ...

$@       $1    $2    $3 ...

"$*"    "$1    $2    $3 ..."

"$@"   "$1" "$2" "$3" ...

基本は同じで、ダブルクォーテーションで囲まれたときの挙動が異なる。

$* では1つの文字列になる。$@ではそれぞれ別の文字列になる。

また、位置パラメタになんの値もセットせれていない場合、

"$*"ではヌルに、"$@"では""に置き換わる。

ヌルの場合はパラメタとして処理しないが、""は「何もないパラメタがある」と処理される。

 

$?変数

コマンド実行時の終了ステータスを表す。

 

$$変数

現在動作しているコマンドの「プロセスID」がセットされる。

 

$!変数

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

wait $! でバックグラウンド処理が終了するのを待つことができる。

 

$-変数

そのシェルの起動時のフラグや、setコマンドを使って設定したフラグの一覧がセットされる。

 

$ CFLAGS=-g make

このようにmakeコマンドを実行すると、CFLAGSという変数に-gという値がセットされ、その変数にこの値を設定した状態でmakeコマンドが実行される。

あくまでその直後のコマンドのための設定であり、他にこの変数や値を利用することはできない。

 

第02章終了。