Bash: opcionalmente passando argumentos para um comando

14

Estou tentando adicionar argumentos a uma chamada de comando depende de outra variável. Por favor, olhe o código de script de shell:

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

No exemplo, se title for dado não como nulo, um argumento será adicionado a curl .

Isso não funciona corretamente se title contiver espaços. Também não consegui envolver $(...) com as cotações, porque se title for nulo, ele gerará um argumento vazio inesperado para curl .

O que devo fazer para que funcione como esperado.

    
por Shou Ya 25.08.2014 / 07:09

1 resposta

15

Eu resolvi o problema com a sintaxe bash ${var:+...} , ( referência ).

O script agora muda para

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

que funciona perfeitamente.

Veja também:

por 25.08.2014 / 07:35