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コマンドが実行される。
あくまでその直後のコマンドのための設定であり、他にこの変数や値を利用することはできない。