Bash: необов'язково передача аргументів команді


21

Я намагаюся додати аргументи до виклику команди залежать від іншої змінної. Перегляньте код сценарію оболонки:

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

У прикладі, якщо titleвін вказаний недійсним, до нього буде додано аргумент curl.

Це не працює правильно, якщо titleмістить пробіли. Крім того, я не міг оточити $(...)цитати, тому що якщо titleце недійсне значення, це призведе до несподіваного порожнього аргументу curl.

Що мені робити, щоб він працював так, як очікували.

Відповіді:


23

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

Тепер сценарій змінюється на

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

яка прекрасно працює.

Також дивіться:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.