这是什么意思?
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
是一些变量,那么+:
是什么意思?
大括号表达式的完整语法在哪里学习?这个语法的名称是什么?
在“加号”
${...+:}
表达式中,只有+
在shell 中具有特殊含义。在这种情况下,冒号只是一个字符串值,因此我们可以将该片段写为${...+":"}
。但是,因为它也是 shell 命令列表中的第一个单词,所以它成为 command :
总是返回 true.
根据变量是否有值的问题,
if
语句变为 if true false;
或 if false;
.
让我们分解一下:
为方便起见,假设变量名为
var
,并考虑表达式:
if ${var+:} false; then ...
如果shell变量
$var
存在,则将整个表达式替换为:
,如果不存在,则返回空字符串。
因此整个表达式
${var+:} false
变成: false
(返回真)或false
(返回假)。
这归结为存在性测试,即使变量没有赋值也可能是真的。
它非常神秘,但碰巧的是,它是为数不多的测试变量是否存在的测试之一,该变量实际上适用于大多数(如果不是全部)伯恩血统的外壳。
可能的等价物:(在这里用任何变量名代替
var
)
if [[ ${var+"is_set"} == is_set ]]; then ...
或者,可能更便携:
case ${var+"IS_SET"} in IS_SET) ...;; esac
为了说明已经说过的话:
取消设置变量(注意一些
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+:}
: