Bash 美元和#x27;{}';curl命令中的平均值

Bash 美元和#x27;{}';curl命令中的平均值,bash,curl,Bash,Curl,我想知道当我发送帖子时,curl命令中的$是什么意思 e、 g.curl-X POST mydomain.com-d$'{\n“some.*.something”:“myvalue”\n}' 此外,我还试图在shell脚本中参数化myvalue,但我无法做到这一点。有什么建议吗 我还是不知道$'{}'是什么意思。然而,我确实得到了要参数化的myvalue "{\"some.*.something\":\"${myValueParamerterized}\"}" $'{\n“some.*.som

我想知道当我发送帖子时,curl命令中的$是什么意思

e、 g.
curl-X POST mydomain.com-d$'{\n“some.*.something”:“myvalue”\n}'


此外,我还试图在shell脚本中参数化
myvalue
,但我无法做到这一点。有什么建议吗

我还是不知道$'{}'是什么意思。然而,我确实得到了要参数化的
myvalue

"{\"some.*.something\":\"${myValueParamerterized}\"}"
$'{\n“some.*.something”:“myvalue”\n}'
在传递给curl之前由shell进行解释

$“…”
就是这样称呼的。它们以shell语言的形式存在于
“…”
“…”
旁边

由于数据本身(看起来是json)包含双引号,因此如果不转义数据本身中的双引号,就不能使用双引号字符串包装数据。这意味着它需要如下所示:

"{\n\"some.*.something\": \"myvalue\"\n}"
{
"some.*.something": "myvalue"
}
基本上可以使用单引号字符串来避免转义

但是由于数据包含换行符转义序列
\n
并且转义序列不会在中展开,因此问题中的示例作者使用了ANSI C字符串
$'

使用ANSIC字符串,它们可以同时得到这两个结果:它们可以避免对数据中的双引号进行转义,并且仍然可以扩展换行转义序列

shell展开后,对于curl,数据如下所示:

"{\n\"some.*.something\": \"myvalue\"\n}"
{
"some.*.something": "myvalue"
}

进一步阅读:

您应该使用
jq
来安全地创建JSON数据。直接替换变量是危险的:如果变量包含引号、反斜杠或其他特殊字符怎么办?请注意,这并不是真的必要;对于JSON数据的使用者而言,
'{“some.*.something”:“myvalue”}“
将完全相同;换行符是不必要的格式。