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}
计算为VAR
or的值,如果未设置或为空,则计算为连字符后的文本(在本例中为default
);语法${VAR- default}
与 a similar function 的相似缩短,仅适用于未设置变量时。$2
是一个位置参数,因此您的语句正在测试第二个参数的值,如果未设置,则使用空值作为默认值。
为什么使用空的默认值,因为这与普通的效果相同$2
?因为 under set -u
(相当于set -o nounset
),替换未设置的变量会导致错误:如果参数少于 2 个,则会$2
出错。但${2:-}
不会出错,因为如果参数未设置或为空,它会显式替换空字符串。