El script bash cURL POST agrega comillas simples a las variables con espacios

El script bash cURL POST agrega comillas simples a las variables con espacios

Las primeras 3 variables siempre no tendrán espacios. El cuarto " slacksitename" tiene espacios

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

Cuando se llama con cURL

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

El resultado es el siguiente:

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."

¿Alguien sabría por qué se agregan comillas simples 123' Main 'St? ¿Y cómo conseguiría que tratara toda la variable como una cadena en lugar de dividirla (que es lo que creo que está haciendo)?

Gracias

ACTUALIZACIÓN: Resuelto ^^

Hacer un seguimiento:

Esto probablemente sigue la misma línea de la pregunta original:

Tengo una variable que es una salida JSON que quiero enviar mediante cURL. Supongo que el problema son las comillas nuevamente, pero la salida JSON puede cambiar (Número de comillas). ¿Hay alguna forma de enviar estos datos sin procesar con cURL en el mensaje con una nueva línea? Gracias

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":[]}."

Respuesta1

Estás usando variables sin comillas en bash y pareces sorprendido de que se produzca la división de palabras. Esto es lo que se supone que debe suceder.

También tiene comillas no estándar en su pregunta que supongo que se deben al formato automático. Pero tenga en cuenta que "no es lo mismo que y 'no es lo mismo que ʼ.

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

En su línea de comando, está citando {"text":"y agregando el contenido sin comillas $slacksitename, lo que significa que se dividirá la palabra. El resultado final serán 3 argumentos separados: {"text":"123, Main, St. El tercer argumento se concatenará con :el cual a su vez se concatenará con el contenido del no entrecomillado, $ippor lo que si hay espacios presentes en esa variable, sucedería lo mismo.

Esto es esencialmente bash 101, cita tus variables a menos que sepas lo que estás haciendo.

Respuesta2

La única forma de solucionar esto que puedo encontrar es guardar el json en un archivo y luego hacer referencia a él en la llamada curl -d "@"

Respuesta3

Solo usa comillas dobles

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

información relacionada