bash中的opts = $ {1:+-host $ 1}是什么意思?

时间:2019-06-14 12:59:42

标签: bash parameter-expansion positional-parameter

在bash脚本中,我偶然发现了这段代码:

opts=${1:+--host $1}
/path/somecmd $opts somesubcmd

通过测试,我发现$opts可以扩展为--host $1。{br1 我想知道这种语法的目的是什么。 为什么不简单地使用$1

是将选项传递给命令的特定方法吗?

3 个答案:

答案 0 :(得分:0)

由于--host,它会在第一个参数前加上+,但前提是$1不为空。

$ function mytest { echo ${1:+--host $1}; }
$ mytest ls
--host ls
$ mytest ""

等效为:

$ function mytest { [ -z "$1"] || echo --host $1; }
$ mytest ls
--host ls

关于shell parameter expansion的内容很多。

答案 1 :(得分:0)

作为bash manual says

  

${parameter:+word}

     

如果 parameter 为null或未设置,则不替换任何内容,否则替换 word 的扩展名。

bash手册中的“参数”表示“变量”。如果说“ null”,则表示“空字符串”。

换句话说,${foo:+bar}的工作方式类似于bar,但前提是$foo不为空。

就您而言,

${1:+--host $1}

它检查$1。如果$1未设置或为空,则整个构造将扩展为空。

如您所见,否则它将扩展为--host $1

答案 2 :(得分:0)

如果${variable:+value}为非空,则参数扩展value产生variable,否则不产生。因此,这是一种说法:“如果设置了--host $1,则添加$1。” (扩展名应正确引用字符串; ${1:+--host "$1~}