代码如下,
if [ -z ${CONFIG+x} ]; then
CONFIG=/usr/local/etc/config.ini
else
CONFIG=$(realpath $CONFIG)
fi
有人可以告诉我" x"究竟是什么意思?
答案 0 :(得分:4)
这意味着如果设置了变量$CONFIG
,则使用值x
,否则使用null(空)字符串。
测试-z
检查以下参数是否为空,因此如果未设置$CONFIG
,则将采用if
分支。
测试它(先前未设置$a
):
$ echo "a: '${a+x}'"
a: ''
$ a='any other value'
$ echo "a: '${a+x}'"
a: 'x'
答案 1 :(得分:2)
这是为POSIX shell定义的parameter expansion功能之一。最简单的只是一个被替换的变量${parameter}
,而其他变量有一个嵌入式操作符,告诉我们如何处理可选参数与可选的单词,例如" $ {参数 OP 字}"
对于这种特殊情况,参数为CONFIG
, OP 为+
,字为{{1 }}:
shell变量的空值来自显式赋值,例如
x
如果从未将变量分配给,则未设置。您可以使用该关键字创建变量 unset :
CONFIG=
Set and Not Null 和 Set and Null 有单独的测试,因为标准列出了8个运算符。对于其中六个,如果 Set and Not Null ,将使用参数的值。
在替换中,您无法看到未设置值和空值之间的差异。一些shell(例如bash)定义了其他类型的参数扩展;这个问题比较笼统。