0

我以前从未见过这种+x}语法,也找不到有关它的文档。它有什么作用?

if [[ -z "${EMPLOYEE_CLUSTER+x}" ]]; then
  export EMPLOYEE_CLUSTER=shared
fi
4

1 回答 1

2

如果定义了变量EMPLOYEE_CLUSTER(甚至是空字符串),则扩展扩展为x. 由于x不是空字符串,因此[[测试将评估为真。如果未定义变量,则扩展扩展为空,并且测试评估为假。请注意,冒号的存在会${EMPLOYEE_CLUSTER:+x}改变扩展;该变量必须设置且非空才能获得x输出。

这是一个稍微不寻常的用法,但在允许空值但必须设置变量的测试中很难做得更好。该表示法更常用于有条件地将值传递给命令。例如:

mythical-creature ${UNICORN:+"-u"} ${UNICORN}

这会将-u选项传递给mythical-creatureif$UNICORN已定义且非空 - 以及存储在$UNICORN. 如果$UNICORN未定义且非空,则不向命令传递任何参数。

请参阅Bash 手册中的Shell 参数扩展— 这是本节中记录的第四个符号。

于 2020-09-19T03:44:49.043 回答