在JSON模板文件中写入Bash变量

4

我需要使用bash脚本创建包含一些变量的json文件。

为此,我有一个bash文件,它使用cat创建json模板文件:

cat <<'EOF' > template.json
{
"ip_range" : "$snmp_ip1", 
"types" : [ "snmp" ],
"description" : "$snmp_cred1",
"snmp.version": "v2c",
"snmp.port" : 161,
"snmp.community" : "$snmp_cred1",
"snmp.retries" : 3,
"snmp.timeout" : 2
}
EOF

很遗憾,cat命令不会将变量扩展为值。 因此,我需要使用jq将一些变量插入模板中,并创建一个包含扩展变量的新文件。 我尝试使用以下代码的jq实现:

jq \
--arg snmp_ip1 "$snmp_ip" \
--arg snmp_cred1 "$snmp_cred" \
'.["snmp_ip1"]=$snmp_ip1 | .["snmp_cred"]=$snmp_cred1' \
<$DIR/template.json >$DIR/cred.json

不幸的是,它只是插入带有变量的新字符串,而不是在模板中扩展变量:

{
"snmp_cred": "fortinet/fortigate/1.3.6.1.4.1.12356.101.1.37000_fortigate3700d/10.82.112.21@public",
"snmp_ip1": "10.82.112.21",
"ip_range": "$snmp_ip1",
"types": [
"snmp"
],
"description": "$snmp_cred1",
"snmp.version": "v2c",
"snmp.port": 161,
"snmp.community": "snmp_cred1",
"snmp.retries": 3,
"snmp.timeout": 2
}

您能提示我如何重写脚本(或者,也许采用另一种方法)来创建具有以下输出的JSON文件:

{
"ip_range": "10.82.112.21",
"types": [ "snmp" ],
"description": "fortinet/fortigate/1.3.6.1.4.1.12356.101.1.37000_fortigate3700d/10.82.112.21@public",
"snmp.version": "v2c",
"snmp.port": 161,
"snmp.community": "fortinet/fortigate/1.3.6.1.4.1.12356.101.1.37000_fortigate3700d/10.82.112.21@public",
"snmp.retries": 3,
"snmp.timeout": 2
}
1个回答

3

请去掉您的分隔符EOF周围的引号,因为这会导致cat不能展开变量。


当我将其更改为:cat <<EOF > template.json时,它只会从模板中删除变量。例如 - "ip_range" : ""。 - Vasyl Stepulo
cat 之前立即执行 echo $snmp_ip1 ,会返回什么? - Jack Bracken
哦,我的错。我在猫部分刚刚输入了错误的变量名。谢谢,你的建议很有用! - Vasyl Stepulo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接