这是什么意思?
if ${ac_cv_lib_lept_pixCreate+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
看起来ac_cv_lib_lept_pixCreate
是一些变量,那么+:
是什么意思?
在哪里学习大括号表达式的完整语法?这个语法的名称是什么?
答案 0 :(得分:19)
在“加冒号”${...+:}
表达式中,只有+
在shell中具有特殊含义。在这种情况下,冒号只是一个字符串值,因此我们可以将该代码段写为${...+":"}
。
为方便起见,让我们假装变量名为var
,并考虑表达式:
if ${var+:} false; then ...
如果shell变量$var
存在,则整个表达式将替换为:
,否则返回空字符串。
因此整个表达式${var+:} false
变为: false
(返回true)或false
(返回false)。
这归结为存在的测试,即使变量没有赋值,也可以为真。
它非常神秘,但实际上,它是少数几个测试中存在变量的测试之一,它实际上适用于Bourne血统的大多数(如果不是全部)炮弹。
可能的等价物:(在此替换var
的任何变量名称)
if [[ ${var+"is_set"} == is_set ]]; then ...
或者,可能更便携:
case ${var+"IS_SET"} in IS_SET) ...;; esac
答案 1 :(得分:9)
bash的Shell参数扩展文档是here。没有提及+:
,但确实提到了:+
:
${parameter:+word}
如果参数为null或未设置,则不替换任何内容,否则将替换word的扩展。
答案 2 :(得分:5)
说明已经说过的话:
取消设置变量(请注意某些echo
命令导致的空行):
$ unset foo
$ echo ${foo}
$ echo ${foo:+:}
$ echo ${foo+:}
空变量:
$ foo=""
$ echo ${foo}
$ echo ${foo:+:}
$ echo ${foo+:}
:
非空变量:
$ foo="bar"
$ echo ${foo}
bar
$ echo ${foo:+:}
:
$ echo ${foo+:}
:
答案 3 :(得分:2)