json格式的bash变量

json格式的bash变量,json,linux,Json,Linux,如何在json文件中使用变量 [root@ip-10-0-5-50 ~]# IP=`aws waf-regional list-ip-sets | grep IPSetId | awk -F ":" '{print $2}' | sed s/,//g` [root@ip-10-0-5-50 ~]# echo $IP "9518adf6-c862-4208-84bf-749e3037cd95" 下面是从脚本执行的代码 ip=`aws waf-regional list-ip-sets | gre

如何在json文件中使用变量

[root@ip-10-0-5-50 ~]# IP=`aws waf-regional list-ip-sets | grep IPSetId | awk -F ":" '{print $2}' | sed s/,//g`
[root@ip-10-0-5-50 ~]# echo $IP
"9518adf6-c862-4208-84bf-749e3037cd95"
下面是从脚本执行的代码

ip=`aws waf-regional list-ip-sets | grep IPSetId | awk -F ":" '{print $2}' | sed s/,//g`
echo $ip
rule_id=`aws waf-regional list-rules | grep RuleId | awk -F ":" '{print $2}' | sed "s/\"//g"`
change_token=`aws waf-regional get-change-token | grep ChangeToken | awk -F ":" '{print $2}' | sed "s/\"//g" `

aws waf-regional update-rule --rule-id $rule_id --change-token $change_token --updates '{ "Action": "INSERT","Predicate":{ "Negated":false,"Type":"IPMatch","DataId":"'"$ip"'"}}'
输出:

"9518adf6-c862-4208-84bf-749e3037cd95"
Error parsing parameter '--updates': Invalid JSON: Expecting ',' delimiter: line 1 column 81 (char 80)
JSON received: { "Action": "INSERT","Predicate":{ "Negated":false,"Type":"IPMatch","DataId":" "9518adf6-c862-4208-84bf-749e3037cd95" "}}

由于“数据ID”而出现问题:“9518adf6-c862-4208-84bf-749e3037cd95”}

可能这就是您正在尝试的操作

#!/bin/bash
export ip="9518adf6-c862-4208-84bf-749e"
eval aws waf-regional update-rule --rule-id 6542a20c-e12e-4a62-93a1-7501a50d97aa --change-token $change_token --updates \'{ \"Action\": \"INSERT\",\"Predicate\":{ \"Negated\":false,\"Type\":\"IPMatch\",\"DataId\":\"$ip\"}}\'

$ip
的值包含双引号,因此不需要在JSON中添加它们。这是在创建一组额外的引号

aws waf-regional update-rule --rule-id $rule_id --change-token $change_token --updates '{ "Action": "INSERT","Predicate":{ "Negated":false,"Type":"IPMatch","DataId":'"$ip"'}}'

该命令在shell脚本中的工作方式应与在交互式shell中的工作方式相同。它在shell脚本中的作用是什么?尝试将
set-x
放在开头,这样您就可以看到命令执行的跟踪。在简单的解释中,我需要“DataId”:$ip输出应显示为“DataId”:“9518adf6-c862-4208-84bf-749e3037cd95”.interactive shell success:aws waf区域更新规则--规则id 6542a20c-e12e-4a62-93a1-7501a50d97aa--更改令牌$change_令牌--更新{“Action”:“INSERT”,“Predicate”:{“Negated”:false,“Type”:“IPMatch”,“DataId”:““$ip”}{“ChangeToken”:“7a9ff14a-77bf 4e01-9426-0126c44314cf”}请编辑问题,在评论中很难看到细节[root@ip-10-0-5-50~]#aws waf地区更新规则——规则id 6542a20c-e12e-4a62-93a1-7501a50d97aa——更改令牌23875c26-7f98-4fa2-a002-99ded75c12ae——更新“{”操作“:”插入“,”谓词“{”否定“:”假,“类型“:”IPMatch“,”数据id“:”9518adf6-c862-4208-84bf-749e3037cd95}”'调用UpdateRule操作时发生错误(WafNoneExistentItemException):引用的项不存在[root@ip-10-0-5-50~]#aws waf区域更新规则——规则id 6542a20c-e12e-4a62-93a1-7501a50d97aa——更改令牌23875c26-7f98-4fa2-a002-99ded75c12ae——更新“{”操作“:”插入“,”谓词“{”否定“:假,“类型”:“IPMatch”,“DataId:”9518adf6-c862-4208-84bf-749e3037cd95“}{“ChangeToken:”23875c26-7f98-4fa2-a002-99ded75c12ae“}当双引号中的DataId值为示例:“DataId:”9518adf6-c862-4208-84bf-749e3037cd95“如果双引号前后有空格,我无法执行示例:“DataId:”9518adf6-c862-4208-84bf-749e3037cd95“@naveen-更新了上述答案以避开所有引用,看看是否对您有效。明白了,谢谢。很抱歉最初没有提供正确的信息