“${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:-}
不会出错,因为如果参数未设置或为空,它会显式替换空字符串。