переменная bash в формате json - PullRequest
0 голосов
/ 15 мая 2018

Как использовать переменные в файле 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" "}}

Ошибка из-за "DataId":" "9518adf6-c862-4208-84bf-749e3037cd95" "}}

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Значение $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"'}}'
0 голосов
/ 15 мая 2018

Может быть, это то, что вы пытаетесь сделать?

#!/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\"}}\'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...