Bash:可选地将参数传递给命令

Sho*_* Ya 30 bash shell-script command-line-arguments bash-scripting

我正在尝试向依赖于另一个变量的命令调用添加参数。请看shell脚本代码:

curl \
  $([ -z "${title}" ] || echo --data-urlencode title=${title}) \
  http://example.com
Run Code Online (Sandbox Code Playgroud)

在这个例子中,如果title给定的不是 null,一个参数将被添加到curl.

如果title包含空格,这将无法正常工作。我也不$(...)能用引号括起来,因为如果title为空,它会产生一个意想不到的空参数curl

我应该怎么做才能让它按预期工作。

Sho*_* Ya 39

我已经用 bash${var:+...}语法解决了这个问题,(参考)。

脚本现在更改为

curl \
    ${title:+ --data-urlencode "title=${title}"} \
    http://example.com
Run Code Online (Sandbox Code Playgroud)

这完美地工作。

另见: