O script bash cURL POST adiciona aspas simples a variáveis ​​com espaços

O script bash cURL POST adiciona aspas simples a variáveis ​​com espaços

As primeiras 3 variáveis ​​sempre não terão espaços. O quarto " slacksitename" tem espaços

ip=“x.x.x.x"
record_name=“demo.xyz"
slackuri:”WEBHOOK"
slacksitename:”123 Main St"

Quando chamado com cURL

curl -X POST -H 'Content-type: application/json' --data '{"text":"’$slacksitename': '$ip' '$record_name' DDNS updated.”}’ $slackuri

A saída é a seguinte:

curl -X POST -H 'Content-type: application/json' --data '{"text":"123' Main 'St: x.x.x.x demo.xyz DDNS updated."}' https://hooks.slack.com/services/……..
curl: (6) Could not resolve host: Main
curl: (3) unmatched close brace/bracket in URL position 59:
St: x.x.x.x demo.xyz DDNS updated."

Alguém saberia por que está adicionando aspas simples a 123' Main 'St? E como eu conseguiria tratar a variável inteira como uma string em vez de dividi-la (que é o que acho que está fazendo)?

Obrigado

ATUALIZAÇÃO: Resolvido ^^

Seguir:

Isso provavelmente segue as mesmas linhas da pergunta original:

Tenho uma variável que é uma saída JSON que desejo enviar via cURL. Estou assumindo que o problema são as cotações novamente, mas a saída JSON pode mudar (número de cotações). Existe alguma maneira de enviar esses dados brutos com cURL na mensagem com uma nova linha? Obrigado

DUMPING RESULTS:\n{"result":{"id":"ppbkbz2ezmxen11vvpi65chsro1vki5y","zone_id":"unuM0sR1gSrQ37r9fGC1sYKFZOP0DzJM","zone_name":"demo.xyz","name":"1.demo.xyz","type":"A","content":"x.x.x.x","proxiable":true,"proxied":false,"ttl":1,"locked":false,"meta":{"auto_added":false,"managed_by_apps":false,"managed_by_argo_tunnel":false,"source":"primary"},"created_on":"2020-06-14T19:13:57.096688Z","modified_on":"2021-10-16T16:57:49.269274Z"},"success":true,"errors":[],"messages":[]}."

Responder1

Você está usando variáveis ​​​​sem aspas no bash e parece surpreso com a divisão de palavras. Isto é o que deveria acontecer.

Você também tem citações fora do padrão em sua pergunta, que presumo serem devido à formatação automática. Mas observe que "não é o mesmo que e 'não é o mesmo que ʼ.

curl -X POST -H 'Content-type: application/json' --data '{"text":"’$slacksitename': '$ip' '$record_name' DDNS updated.”}’ $slackuri

Na sua linha de comando, você está citando {"text":"e anexando o conteúdo não citado $slacksitename, o que significa que a divisão de palavras ocorrerá nele. O resultado final será 3 argumentos separados: {"text":"123, Main, St. O terceiro argumento será concatenado com :o qual ele próprio será concatenado com o conteúdo do sem aspas, $ipportanto, se houver espaços presentes nessa variável, o mesmo aconteceria.

Isto é essencialmente o bash 101, cite suas variáveis, a menos que você saiba o que está fazendo.

Responder2

A única maneira de contornar isso é salvar o json em um arquivo e referenciá-lo na chamada curl -d "@"

Responder3

Basta usar aspas duplas

curl -X POST -H 'Content-type: application/json' -d "$json"

informação relacionada