如何将bash变量传递给curl?

时间:2017-08-24 09:03:56

标签: bash curl

我很难将bash变量传递给curl。我的脚本如下:

now=$(date)

curl --data-binary '{"jsonrpc":"1.0","id":"curltext","method":"importprivkey","params":["test",$now,false]}' -H 'content-type:text/plain;' http://chad:password@127.0.0.1:8332/

$now未传递给curl字符串。我错过了什么?

2 个答案:

答案 0 :(得分:1)

变量不会在单引号字符串(')中展开,只在双引号字符串(")和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://httpbin.org/post
{
  "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"
}

在我看来,这样的东西看起来相当丑陋/不可读。这是考虑将shell脚本与上述heredoc一起使用,或者转换为更结构化的编程语言(如Python)的好时机。在shell脚本中处理JSON并没有让很多人满意; - )

答案 1 :(得分:0)

解决:

now=$(date)

curl --data-binary '{"jsonrpc":"1.0","id":"curltext","method":"importprivkey","params":['"$var3"','"$now"',false]}' -H 'content-type:text/plain;' http://chad:password@127.0.0.1:8332/