Bash: опционально передавая аргументы команде

21

Я пытаюсь добавить аргументы для вызова команды зависит от другой переменной. Пожалуйста, посмотрите код сценария оболочки:

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

В примере, если titleзадано не нуль, аргумент будет добавлен в curl.

Это не работает правильно, если titleсодержит пробелы. Также я не смог заключить в $(...)кавычки, потому что если titleравно null, это приведет к неожиданному пустому аргументу curl.

Что я должен сделать, чтобы все заработало как надо.

Шоу Я
источник

Ответы:

23

Я решил проблему с ${var:+...}синтаксисом bash , ( ссылка ).

Сценарий теперь изменяется на

curl \
    ${title:+ --data-urlencode "title=${title}"} \
    http://example.com

который работает отлично.

Также см:

Шоу Я
источник