带冒号破折号的变量 ${VAR:-}

带冒号破折号的变量 ${VAR:-}

“${2:-}”在下面的“if-then-else 示例”中如何工作?不知何故,我忍不住认为 ${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

语法${VAR:-default}计算结果为或的值VAR,如果未设置或为空,则计算结果为连字符后的文本(在本例中为default);语法${VAR- default}类似于类似函数的缩写仅有的当变量未设置时。$2是一个位置参数,因此您的语句正在测试第二个参数的值,如果未设置,则使用空值作为默认值。

为什么要使用空的默认值,因为这与普通的具有相同的效果$2?因为在set -u(相当于set -o nounset)下,替换未设置的变量会导致错误:如果参数少于 2 个,$2则会出错。但${2:-}不会出错,因为如果参数未设置或为空,它会显式替换空字符串。

相关内容