Basicamente, seu problema é Por que meu script de shell sufoca em espaços em branco ou outros caracteres especiais?
Quando você escreve $curl_command
fora de aspas, isso pega o valor da variável curl_command
e a divide em palavras separadas em cada seqüência de espaço em branco. (E então cada palavra é interpretada como um padrão curinga e substituída pela lista de nomes de arquivos correspondentes, se houver nomes de arquivos correspondentes, mas, no seu caso, não há curingas, portanto, essa etapa não altera nada.)
As cotações fazem parte da sintaxe do shell. Eles não são afetados pela expansão de variáveis não citadas. Portanto, o comando $curl_command
executa curl
com os argumentos -g
, -x
, ""
e -k
.
Você está tentando inserir uma lista de strings (argumentos de comando) em uma string. Isso não funciona bem. Nada te dará uma palavra vazia, de fato.
A solução robusta é usar uma variável do tipo lista de strings para armazenar a lista de strings. Isso é chamado de array no shell. Matrizes de suporte Bash, ksh e zsh:
curl_command=(curl -g -x "" -k)
…
"${curl_command[@]}" http://www.example.com/rest/v1/blah
A variável curl_command
contém uma matriz de 5 elementos, cujos elementos são curl
, -g
, -x
, uma sequência vazia e -k
.
Se você precisa de um script sh simples, você pode usar os parâmetros posicionais, supondo que você não precise deles para mais nada.
set -- curl -g -x "" -k
…
"$@" http://www.example.com/rest/v1/blah
Outra possibilidade seria usar uma função para encapsular o código que você deseja usar várias vezes.
curl_command () {
curl -g -x "" -k "$@"
}
…
curl_command http://www.example.com/rest/v1/blah