Первые 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":"123
Main
St
:
$ip
По сути, это азы bash: заключайте переменные в кавычки, если не знаете, что делаете.
решение2
Единственный способ обойти это, который я могу найти, — сохранить json в файл, а затем сослаться на него в curl-вызове -d "@"
решение3
Просто используйте двойные кавычки.
curl -X POST -H 'Content-type: application/json' -d "$json"