前 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
?我如何才能將整個變數視為一個字串而不是拆分它(我認為這是它正在做的事情)?
謝謝
更新:已解決^^
跟進:
這可能與原始問題的思路相同:
我有一個變量,它是我想透過 cURL 發送的 JSON 輸出。我假設問題再次出在引號上,但 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":"
並附加未引用的內容$slacksitename
,這意味著將對其進行分詞。最終結果將是 3 個獨立的參數:{"text":"123
, Main
, St
。第三個參數將與其連接:
,它本身將與未引用的內容連接,$ip
因此我們是該變數中存在的任何空格,相同的情況也會發生。
這本質上是 bash 101,引用你的變量,除非你知道你在做什麼。
答案2
我能找到的解決這個問題的唯一方法是將 json 保存到檔案中,然後在 curl 呼叫 -d "@" 中引用它
答案3
只需使用雙引號即可
curl -X POST -H 'Content-type: application/json' -d "$json"