Você escreveu:
curl --verbose -H \"${header1}\" -H \"${header2}\" ...
mas parece que você realmente quer:
curl --verbose -H "${header1}" -H "${header2}" ...
Com os valores definidos para header1
e header2
, o antigo
faria com que curl
recebesse como parâmetros --verbose
, -H
,
"Accept:
, application/json"
, -H
, "Content-Type:
e
application/json"
, enquanto você realmente deseja que cada valor de cabeçalho seja
próprio token, que as aspas duplas sem escape fornecerão.
Além disso, vejo você passando -d '{\"id\": \"$stp\"}'
. Você provavelmente
quer -d "{\"id\": \"$stp\"}"
lá.
Quanto à sua pergunta sobre por que os whings parecem funcionar bem dentro do eco, "mas não no bash", bem, as coisas não funcionaram bem com o eco, é só que isso dificulta ver esse fato.
Compare:
$ h1='Accept: foo'; h2='Content-Type: bar'
## Looks good, is actually wrong:
$ echo curl -H \"$h1\" -H \"$h2\"
curl -H "Accept: foo" -H "Content-Type: bar"
## If we ask printf to print one parameter per line:
$ printf '%s\n' curl -H \"$h1\" -H \"$h2\"
curl
-H
"Accept:
foo"
-H
"Content-Type:
bar"
Com:
## Looks different from the bash command, is actually right:
$ echo curl -H "$h1" -H "$h2"
curl -H Accept: foo -H Content-Type: bar
## This is more obvious if we ask printf to print one parameter per line:
$ printf '%s\n' curl -H "$h1" -H "$h2"
curl
-H
Accept: foo
-H
Content-Type: bar