Das cURL POST-Bash-Skript fügt Variablen mit Leerzeichen einfache Anführungszeichen hinzu

Das cURL POST-Bash-Skript fügt Variablen mit Leerzeichen einfache Anführungszeichen hinzu

Die ersten 3 Variablen enthalten immer keine Leerzeichen. Die vierte " slacksitename" enthält Leerzeichen

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

Bei Aufruf mit cURL

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

Die Ausgabe lautet wie folgt:

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

Weiß jemand, warum einfache Anführungszeichen hinzugefügt werden 123' Main 'St? Und wie ich es hinbekomme, die gesamte Variable als eine Zeichenfolge zu behandeln, anstatt sie aufzuteilen (was meiner Meinung nach der Fall ist)?

Danke

UPDATE: Gelöst^^

Nachverfolgen:

Dies läuft wahrscheinlich auf die gleiche Linie wie die ursprüngliche Frage:

Ich habe eine Variable, die eine JSON-Ausgabe ist, die ich über cURL senden möchte. Ich gehe davon aus, dass es sich wieder um Anführungszeichen handelt, aber die JSON-Ausgabe kann sich ändern (Anzahl der Anführungszeichen). Gibt es eine Möglichkeit, diese Rohdaten mit cURL in der Nachricht mit einer neuen Zeile zu senden? Danke

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

Antwort1

Sie verwenden Variablen ohne Anführungszeichen in Bash und scheinen überrascht zu sein, dass eine Worttrennung stattfindet. Das ist, was passieren soll.

Ihre Frage enthält auch nicht standardmäßige Anführungszeichen, die meiner Meinung nach auf die automatische Formatierung zurückzuführen sind. Beachten Sie jedoch, dass dies "nicht dasselbe ist wie und 'nicht dasselbe ist wie ʼ.

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

In Ihrer Befehlszeile setzen Sie Anführungszeichen {"text":"und hängen den nicht in Anführungszeichen gesetzten Inhalt $slacksitenamedaran an, was bedeutet, dass eine Worttrennung stattfindet. Das Endergebnis sind 3 separate Argumente: {"text":"123, Main, St. Das dritte Argument wird mit verknüpft, :das wiederum mit dem Inhalt des nicht in Anführungszeichen gesetzten verknüpft wird, $ipsodass bei allen in dieser Variable vorhandenen Leerzeichen dasselbe passiert.

Dies ist im Wesentlichen Bash 101. Setzen Sie Ihre Variablen in Anführungszeichen, es sei denn, Sie wissen, was Sie tun.

Antwort2

Die einzige Möglichkeit, dies zu umgehen, die ich sehe, besteht darin, das JSON in einer Datei zu speichern und dann im Curl-Aufruf -d "@" darauf zu verweisen.

Antwort3

Verwenden Sie einfach doppelte Anführungszeichen

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

verwandte Informationen