$ ./args.sh a a a abc abc def abc def $ ./args.sh now ./args.sh: line 3: 1: parameter null or not set 説明 ${B:=abc} は、$B に値がセットされていたらそれを使い、 セットされていなかったら = のあとに指定した値を $B に代入し使用する、という意味です。 ${1:-now} も似たような意味です。$1 に値がセットされていたらそれを使い、 セットされていなかったら - のあとに指定した値を使用します。 ただし、指定した変数には代入されません。位置パラメタを扱うには好都合なわけです。 ${1:?} は、コメントの記述の通り、指定した変数の nullチェック をしてくれます。 しかも、シェルスクリプトの中に記載すると、値がセットされていなければ終了ステータス 1 で処理を終了して