单引号字符串('
)中不会展开变量,只有双引号字符串("
)和heredoc才能展开变量。
在您的情况下,将单引号换成双引号意味着您必须反斜杠转义JSON字符串中的所有双引号。不要担心!您也可以连接字符串!您不需要任何特殊的运算符,如+
或.
,只需停止引用并启动新的引用字符串:
$ curl [..] '...json...'"$now"'..json..'
完整示例:
$ now=$(date)
$ curl \
--data-binary \
'{"jsonrpc":"1.0","id":"curltext","method":"importprivkey","params":["test","'"$now"'",false]}' \
-H 'content-type:text/plain;' \
http:
{
"args": {},
"data": "{\"jsonrpc\":\"1.0\",\"id\":\"curltext\",\"method\":\"importprivkey\",\"params\":[\"test\",\"Thu Aug 24 10:10:32 BST 2017\",false]}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Connection": "close",
"Content-Length": "111",
"Content-Type": "text/plain;",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1"
},
"json": null,
"origin": "34.194.174.91",
"url": "http://httpbin.org/post"
}
我认为这样的东西看起来相当丑陋/难以阅读。现在是考虑使用具有上述heredoc的shell脚本,或切换到更结构化的编程语言(如Python)的好时机。在shell脚本中处理JSON并没有让很多人感到满意;-)