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

noc*_*key 9 shell variable-substitution arguments

"${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
Run Code Online (Sandbox Code Playgroud)

Dop*_*oti 13

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

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

  • 我想这取决于脚本的这一部分的上下文是否有`set -u` 到位(: (2认同)