如何理解$ {CONFIG + x}中的x

时间:2015-05-05 07:59:11

标签: shell scripting sh

代码如下,

if [ -z ${CONFIG+x} ]; then
CONFIG=/usr/local/etc/config.ini
else
CONFIG=$(realpath $CONFIG)
fi

有人可以告诉我" x"究竟是什么意思?

2 个答案:

答案 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 }}:

  • 如果参数为 Set and Not Null ,则使用 word 的值,否则
  • 如果参数为 Set and Null ,则使用 word 的值,否则
  • 使用空值

shell变量的空值来自显式赋值,例如

x

如果从未将变量分配给,则未设置。您可以使用该关键字创建变量 unset

CONFIG=

Set and Not Null Set and Null 有单独的测试,因为标准列出了8个运算符。对于其中六个,如果 Set and Not Null ,将使用参数的值。

在替换中,您无法看到未设置值和空值之间的差异。一些shell(例如bash)定义了其他类型的参数扩展;这个问题比较笼统。