shell Bash双引号和单引号,我无法解决这个[duplicate]

vohkndzv  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(120)

此问题在此处已有答案

How do I insert a bash variable into the JSON body of a cURL request?(2个答案)
Using curl POST with variables defined in bash script functions(11个答案)
13天前关闭。
我在写一个bash脚本。在一个curl命令中我需要一个变量...只是它从来没有被识别,或者命令不起作用。我搜索了论坛,但没有找到任何合适的。你能帮助我吗?

message="test"
curl -XPOST -d '{"msgtype":"m.text", "body":"$message"}' $curlurl

因为我需要这个json格式,所以必须保留双引号。
谢谢你。你好丹尼尔
我试过:
将单引号替换为双引号... \以失去其含义...但没有任何效果。

ppcbkaq5

ppcbkaq51#

$message出现在单引号字符串中,因此未展开。("只是该单引号字符串的一部分,与shell引号无关。)
“正确的”版本是将字符串用双引号引起来,并对嵌入的引号进行转义:

curl -XPOST -d "{\"msgtype\":\"m.text\", \"body\":\"$message\"}' "$curlurl"

但这既繁琐又脆弱,因为您需要确保message值中的任何双引号都被正确转义。

jq --arg m "$message" '{msgtype: "m.text", body: $m}' |
   curl -XPOST -d @-

@-告诉-d选项从标准输入读取。

相关问题