bash中opts=${1:+--host $1}是什么意思?
What is the meaning of opts=${1:+--host $1} in bash?
在 bash 脚本中,我偶然发现了这段代码:
opts=${1:+--host }
/path/somecmd $opts somesubcmd
通过测试,我发现 $opts
扩展为 --host
无论 </code> 是什么。<br>
我想知道这种语法的目的是什么。
为什么不简单地使用 <code>opts="--host "
?
这是将选项传递给命令的特定方式吗?
由于 +
,它将 --host
添加到第一个参数,但前提是 </code> 不为空。</p>
<pre><code>$ function mytest { echo ${1:+--host }; }
$ mytest ls
--host ls
$ mytest ""
等价于:
$ function mytest { [ -z ""] || echo --host ; }
$ mytest ls
--host ls
有很多值得阅读的内容
作为 bash manual says:
${<em>parameter</em>:+<em>word</em>}
If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted.
当bash手册说“参数”时,它的意思是“变量”。当它说“null”时,表示“空字符串”。
换句话说,${foo:+bar}
的工作方式类似于 bar
,但前提是 $foo
不为空。
在你的情况下,
${1:+--host }
它检查 </code>。如果 <code>
未设置或为空,则整个构造将展开为空。
否则它会扩展到 --host
,如您所见。
如果 variable
为非空,则参数扩展 ${variable:+value}
生成 value
,否则不生成任何内容。所以这是说 "add --host
if </code> is set." 的一种方式(扩展应该正确地引用字符串;<code>${1:+--host "~}
)
在 bash 脚本中,我偶然发现了这段代码:
opts=${1:+--host }
/path/somecmd $opts somesubcmd
通过测试,我发现 $opts
扩展为 --host
无论 </code> 是什么。<br>
我想知道这种语法的目的是什么。
为什么不简单地使用 <code>opts="--host "
?
这是将选项传递给命令的特定方式吗?
由于 +
,它将 --host
添加到第一个参数,但前提是 </code> 不为空。</p>
<pre><code>$ function mytest { echo ${1:+--host }; }
$ mytest ls
--host ls
$ mytest ""
等价于:
$ function mytest { [ -z ""] || echo --host ; }
$ mytest ls
--host ls
有很多值得阅读的内容
作为 bash manual says:
${<em>parameter</em>:+<em>word</em>}
If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted.
当bash手册说“参数”时,它的意思是“变量”。当它说“null”时,表示“空字符串”。
换句话说,${foo:+bar}
的工作方式类似于 bar
,但前提是 $foo
不为空。
在你的情况下,
${1:+--host }
它检查 </code>。如果 <code>
未设置或为空,则整个构造将展开为空。
否则它会扩展到 --host
,如您所见。
如果 variable
为非空,则参数扩展 ${variable:+value}
生成 value
,否则不生成任何内容。所以这是说 "add --host
if </code> is set." 的一种方式(扩展应该正确地引用字符串;<code>${1:+--host "~}
)