来自 Bash 手册
${parameter:+word}
如果参数为 null 或未设置,则不会替换任何内容,否则单词的扩展被替换。
仅当“parameter”中的目标字符串存在且不为空时,才看起来像是字符串替换。
这种参数扩展的目的和用例是什么?
谢谢。
答案1
您可以将其与标志变量一起使用,例如向命令行添加一些标志:
use_x=1
param_x=foobar
somecmd ${use_x:+-x} ${use_x:+$param_x}
当然, with 部分param_x
并不是一个好主意,因为它容易受到分词和通配符的影响。不过,这对于静态标志本身来说应该不是问题,但一般来说,在这里使用数组会更健壮。
要测试变量是否已设置,[ -n "$var" ]
工作原理类似,因此${var:+value}
.另一方面,${var+value}
(没有冒号)对于区分空变量和未设置变量很有用:
unset a
b=
[ "${a+x}" = "x" ] && echo a is set
[ "${b+x}" = "x" ] && echo b is set