Скрипт bash cURL POST добавляет одинарные кавычки к переменным с пробелами

Скрипт bash cURL POST добавляет одинарные кавычки к переменным с пробелами

Первые 3 переменные всегда будут без пробелов. Четвертая " slacksitename" имеет пробелы

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

При вызове с помощью cURL

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

Вывод следующий:

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

Кто-нибудь знает, почему он добавляет одинарные кавычки к 123' Main 'St? И как мне заставить его обрабатывать всю переменную как одну строку, а не разбивать ее (что, как я думаю, он и делает)?

Спасибо

ОБНОВЛЕНИЕ: Решено^^

Следовать за:

Вероятно, это соответствует первоначальному вопросу:

У меня есть переменная, которая является выходом JSON, который я хочу отправить через cURL. Я предполагаю, что проблема снова в цитатах, но выход JSON может измениться (количество цитат). Есть ли способ отправить эти необработанные данные с помощью cURL в сообщении с новой строкой? Спасибо

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

решение1

Вы используете не заключенные в кавычки переменные в bash и удивляетесь, что происходит разбиение слов. Это то, что должно происходить.

У вас также есть нестандартные кавычки в вашем вопросе, которые, как я предполагаю, являются следствием автоматического форматирования. Но обратите внимание, что "это не то же самое, что и 'не то же самое, что ʼ.

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

В вашей командной строке вы цитируете и добавляете к нему {"text":"незакавыченное содержимое , что означает, что в нем будет выполнено разделение слов. Конечным результатом будут 3 отдельных аргумента: , , . Третий аргумент будет объединен с , который сам будет объединен с содержимым незакавыченного, поэтому если в этой переменной есть пробелы, произойдет то же самое.$slacksitename{"text":"123MainSt:$ip

По сути, это азы bash: заключайте переменные в кавычки, если не знаете, что делаете.

решение2

Единственный способ обойти это, который я могу найти, — сохранить json в файл, а затем сослаться на него в curl-вызове -d "@"

решение3

Просто используйте двойные кавычки.

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

Связанный контент