curl命令中$'{}'的含义是什么

Dar*_*ari 4 bash curl

我想知道在发送POST时curl命令中的$是什么意思.

例如 curl -X POST mydomain.com -d $'{\n"some.*.something": "myvalue"\n}'

此外,我试图myvalue在我的shell脚本中参数化,但我无法做到.有什么建议?

hek*_*mgl 5

$'{\n"some.*.something": "myvalue"\n}'以前被传递给卷曲得到由shell来解释.

$'...'是所谓的ANSI C字符串.它们以双引号字符串 "..."单引号字符串 旁边的shell语言存在'...'.

由于数据本身 - 似乎是json - 包含双引号,因此双引号字符串不能用于包装数据而不转义数据本身中的双引号.意思是它需要看起来像这样:

"{\n\"some.*.something\": \"myvalue\"\n}"
Run Code Online (Sandbox Code Playgroud)

基本上单引号字符串可用于避免转义".

'{\n"some.*.something": "myvalue"\n}'
Run Code Online (Sandbox Code Playgroud)

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

使用ANSI C字符串可以获得两者:它们可以避免转义数据中的双引号,并且仍然可以扩展换行符转义序列.

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

{
"some.*.something": "myvalue"
}
Run Code Online (Sandbox Code Playgroud)

进一步阅读:https://www.gnu.org/software/bash/manual/html_node/Quoting.html