放入json中的Cocatenate 2个变量不起作用

放入json中的Cocatenate 2个变量不起作用,json,bash,api,curl,cloudflare,Json,Bash,Api,Curl,Cloudflare,我需要连接两个变量,但是当我执行bash代码时,我得到了这个错误filters.api.malformed\u request\u body 我需要获取当前IP,以便能够向筛选器添加新IP,这是因为我需要使用两个变量,$a是防火墙规则中的当前IP,$b是我将添加的新IP 从 要保留现有值,请发出GET请求,并根据响应确定要在PUT请求中包含哪些字段(以及相应的值),这样可以避免任何不希望的覆盖 代码: 我也试过:“(ip.src在{'a$b'})”和: new_filter="$a $b" ..

我需要连接两个变量,但是当我执行bash代码时,我得到了这个错误
filters.api.malformed\u request\u body

我需要获取当前IP,以便能够向筛选器添加新IP,这是因为我需要使用两个变量,
$a
是防火墙规则中的当前IP,
$b
是我将添加的新IP

要保留现有值,请发出GET请求,并根据响应确定要在PUT请求中包含哪些字段(以及相应的值),这样可以避免任何不希望的覆盖

代码:

我也试过:
“(ip.src在{'a$b'})”和

new_filter="$a $b"
...
...
"(ip.src in {'$new_filter'})"
如果i
echo$new\u filter
显示正确的结果:

new_filter="$a $b"
echo $new_filter
#122.16.89.10 137.77.77.77
当我使用变量
$new\u filter
时,它也会显示此错误
curl:(3)[globbing]第13列中不匹配的右括号/方括号
第13行是这一行
-H“Content Type:application/json”\

都没用,为什么?我得到这个错误:

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

这是可行的:
({'$a'}中的ip.src)

好吧,让我们以您的第一个示例为例,修改它以打印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:”({'$a'$b'}中的ip.src),
这将生成有效的JSON。

试试
”({'$a$b'}中的ip.src),
@oguzismail这是有效的,为什么?它与
newfilter=“$a$b”
相同(我认为)。不,不一样。您没有引用
$new\u filter
并将其扩展为两个单词,
.“$new\u filter”…
也可以使用。这在本例中适用,但通常不是一个好的做法。如果
$a
$b
应包含空格,则会出现分词问题again@oguzismail它生成
“expression:”({122.16.89.10 137.77.77.77}中的ip.src)
——根据文档,不需要在过滤器字符串内部引用ip。
$a
$b
中的空格不应该破坏任何东西。我是说在这种情况下,
$a
$b
不带引号;没关系
{
   "id": "ID",
   "paused": false,
   "expression": "(ip.src in {122.16.89.10" "137.77.77.77})",
   "description": "Block IP"
}
]