シェル変数について勉強した。
ヌル値変数 - 値が未設定のシェル変数(undefined variable) 変数を一端セットすると値が何もないように見えても実際はヌル値が入っている。

値は何もない(ヌル値の入った)変数の宣言の仕方
variable=
variable=""

シェル変数の初期設定
$(variable:=value)
$(variable=value)
コロン付きは変数の中身が未使用、もしくはヌル値であれば value
代入する。
コロンなしは変数の中身が未使用であるときのみ、value を代入する。

以下三つの書き方はif文で表現可能
$(variable:-value)
$(variable-value)


$(variable:?message)
$(variable?message)
valuableに値が入っていればそのまま。
未使用、未設定のとき, messageが表示される。

$(variable:+value)
$(variable+value)
variable に値がセットされている場合でのみ、valueを表示

位置パラメータ

位置パラメータ(要するに引数を表す変数)は$0から$9までである。

実験

******source***********

#/bin/sh

echo $0 $1 $2 $3 $4 $5 $6 $6 $7

******実行結果 *******

dorayaki@[~/study/shell_scrpt]$ ./nnn.sh a b c d e f g h
./nnn.sh a b c d e f f g
dorayaki@[~/study/shell_scrpt]$ ./nnn.sh *
./nnn.sh append.sh bk_q.sh nnn.sh test1 test2

***********************

$(@+:"$@"}の解釈
これは$@(位置パラメータ=引数)になにもセットされていない場合、"$@"を表示するということで
あるらしい。
渡すべきパラメータが存在しない場合、"$@"は""(つまり何もないパラメータ)として
処理される。
/*しかし、"$*"はヌル値置き換わるらしい。今の私には(何もないパラメータ)を(ヌル値)の
違いがよくわからない。*/
つまりこれは、位置パラメータに何もセットされていない場合は何もしないということらしい。
これを理解するには、もう少し勉強が必要なようだ。

また$0 〜 $9、$#、$*、$@ はシェルが自動的にセットするので、ユーザーが勝手にセットすることはできない。