cURL POST bash 脚本为带有空格的变量添加单引号

cURL POST bash 脚本为带有空格的变量添加单引号

前 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":"未引用的内容并将其附加到$slacksitename其中,这意味着将对其进行分词。最终结果将是 3 个单独的参数:{"text":"123MainSt。第三个参数将与 连接,:而 本身将与未引用的内容连接$ip,因此如果该变量中存在任何空格,也会发生相同的情况。

这本质上是 bash 101,引用你的变量,除非你知道自己在做什么。

答案2

我能找到的解决这个问题的唯一方法是将 json 保存到文件中,然后在 curl 调用 -d“@”中引用它

答案3

只需使用双引号

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

相关内容