コロンダッシュのある変数 ${VAR:-}

コロンダッシュのある変数 ${VAR:-}

以下の「if-then-elseの例」では、「${2:-}」はどのように機能しますか?なぜか${2:-}が2番目の引数を意味するとは思わないが、数字2の後のコロン(:)とダッシュ(-)が何を意味するのか疑問に思う。

  if [ "${2:-}" = "Y" ]; then
     prompt="Y/n"
     default=Y
  elif [ "${2:-}" = "N" ]; then
     prompt="y/N"
     default=N
  else
     prompt="y/n"
     default=
  fi

  read -p "$1 [$prompt] " REPLY </dev/tty

答え1

構文は、orまたは設定されていない場合はハイフンの後のテキスト(この場合)の${VAR:-default}値として評価されます。構文は、同様の関数の略語に似ています。VARdefault${VAR- default}ただ変数が設定されていない場合。$2位置パラメータなので、ステートメントは設定されていない場合はデフォルトとしてnullを使用して2番目のパラメータの値をテストします。

通常のデフォルトと同じ効果がありますが、なぜ空のデフォルトを使用するのですか$2set -u(と同じ)でset -o nounset設定されていない変数を置き換えるとエラーが発生するため、引数が2つ未満の場合は$2エラーが発生します。ただし、${2:-}パラメータが設定されていないか空の場合は、空の文字列を明示的に置き換えるため、エラーは発生しません。

関連情報