$ {ARGUMENT + x}在Bash中意味着什么?

Ale*_*o C 6 bash

我有一个使用以下语法的bash脚本:

if [ ! -z ${ARGUMENT+x} ]; then
Run Code Online (Sandbox Code Playgroud)

参数名称后面的"+ x"语法是什么意思?

che*_*ner 11

我不讨论语法,而是指出它试图做什么:它试图确定变量ARGUMENT是否设置为任何值(空或非空)。在现代中bash,人们会改用-v运算符:

if [[ -v ARGUMENT ]]; then
Run Code Online (Sandbox Code Playgroud)

  • 注意,这里的“现代`bash`”特指版本`>=4.3`。 (2认同)

Gil*_*not 7

这意味着如果$ARGUMENT不为null,它将被字符串替换x

让我们试试一个shell:

$ echo  ${ARGUMENT+x}

$ ARGUMENT=123
$ echo  ${ARGUMENT+x}
x
Run Code Online (Sandbox Code Playgroud)

你也可以用这个表格写这个:

${ARGUMENT:+x}
Run Code Online (Sandbox Code Playgroud)

:因为我们认识到bash 参数扩展,所以不那么令人惊讶

  • “*你也可以用这种形式写这个*”,但它会做一些不同的事情。 (3认同)
  • 哦,为什么 bash 需要这么深奥呢? (3认同)