尝试在外壳中动态添加值到数组时,我在JSON文件下面遇到错误。
下面是一个tmp.json文件,
{
"environments": {
"integration": [
"testing for jenkins job"
],
"prod": [],
"staging": [],
"uat": []
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将值附加到带有静态变量的数组时,它可以正常工作。下面是命令jq'.environments.integration + = [“ test1”]'tmp.json
各自的输出是,
{
"environments": {
"appbuild": [],
"integration": [
"testing for jenkins job",
"test1"
],
"prod": [],
"staging": [],
"uat": []
}
}
Run Code Online (Sandbox Code Playgroud)
而当我尝试动态附加值时,会引发错误。
export Environment_Name="integration"
jq ".environments."\"${Environment_Name}"\" += test1" tmp.json
Run Code Online (Sandbox Code Playgroud)
我得到的错误是,
jq: error: test1/0 is not defined at <top-level>, line 1:
.environments."integration" += test1
jq: 1 compile error
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助解决此问题。
您那里有一些额外的报价,test1需要["test1"]
jq ".environments.${Environment_Name} += [\"test1\"]" tmp.json
使用基于shell的变量插值通常是一个非常糟糕的主意-例如,在当前情况下,如果shell变量包含双引号怎么办?安全的做法是根据需要使用env或--arg或--argjson,例如
jq —-arg e "${Environment_Name}" '.environments[$e] += ["test1"]'
Run Code Online (Sandbox Code Playgroud)