以下の「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}
値として評価されます。構文は、同様の関数の略語に似ています。VAR
default
${VAR- default}
ただ変数が設定されていない場合。$2
位置パラメータなので、ステートメントは設定されていない場合はデフォルトとしてnullを使用して2番目のパラメータの値をテストします。
通常のデフォルトと同じ効果がありますが、なぜ空のデフォルトを使用するのですか$2
?set -u
(と同じ)でset -o nounset
設定されていない変数を置き換えるとエラーが発生するため、引数が2つ未満の場合は$2
エラーが発生します。ただし、${2:-}
パラメータが設定されていないか空の場合は、空の文字列を明示的に置き換えるため、エラーは発生しません。