在bash脚本中,我偶然发现了这段代码:
opts=${1:+--host $1}
/path/somecmd $opts somesubcmd
通过测试,我发现$opts
可以扩展为--host $1
。{br1
我想知道这种语法的目的是什么。
为什么不简单地使用$1
?
是将选项传递给命令的特定方法吗?
答案 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)
${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~}
)