串联2个变量放入json中不起作用

时间:2019-05-10 21:29:42

标签: json bash api curl cloudflare

我需要连接2个变量,但是当我执行bash代码时,出现此错误filters.api.malformed_request_body

我需要获取当前IP,以便能够向过滤器添加新IP,这是因为我需要使用两个变量,$a是防火墙规则中的当前IP,并且{ {1}}是我要添加的新IP。

来自Cloudflare

  

要保留现有值,请发出GET请求,并根据响应确定要在PUT请求中包括哪些字段(以及相应的值),并避免不必要的覆盖。

代码:

$b

我还尝试了:a=122.16.89.10 b=137.77.77.77 curl -X PUT \ -H "X-Auth-Email: EMAIL" \ -H "X-Auth-Key: KEY" \ -H "Content-Type: application/json" \ -d '[ { "id": "ID", "paused": false, "expression": "(ip.src in {'$a'" "'$b'})", "description": "Block IP" } ]' "https://api.cloudflare.com/client/v4/zones/ZONE/filters" 和:

"(ip.src in {'$a $b'})"

如果我new_filter="$a $b" ... ... "(ip.src in {'$new_filter'})" 显示正确的结果:

echo $new_filter

当我使用变量new_filter="$a $b" echo $new_filter #122.16.89.10 137.77.77.77 时,它也显示此错误$new_filter,第13行就是这个curl: (3) [globbing] unmatched close brace/bracket in column 13

没有工作,为什么?我收到此错误:

-H "Content-Type: application/json" \

这有效:{ "result": null, "success": false, "errors": [ { "code": 10014, "message": "filters.api.malformed_request_body" } ], "messages": [] }

1 个答案:

答案 0 :(得分:1)

好吧,让我们来看第一个示例,并对其进行修改以打印JSON正文:

export a=122.16.89.10
export b=137.77.77.77

echo '[
{
   "id": "ID",
   "paused": false,
   "expression": "(ip.src in {'$a'" "'$b'})",
   "description": "Block IP"
}
]'

输出是这样的:

{
   "id": "ID",
   "paused": false,
   "expression": "(ip.src in {122.16.89.10" "137.77.77.77})",
   "description": "Block IP"
}
]

您可以看到JSON无效。 expression中的双引号不平衡。

改为尝试"expression": "(ip.src in {'$a' '$b'})", -会产生有效的JSON。