这是一个名为test.json的json文件,用于测试
{
"name": "Google",
"location": {
"street": "1600 Amphitheatre Parkway",
"city": "Mountain View",
"state": "California",
"country": "US"
},
"employees": [
{
"name": "Michael",
"division": "Engineering"
},
{
"name": "Laura",
"division": "HR"
},
{
"name": "Elise",
"division": "Marketing * test"
}
]
}
如果我使用jq
代码解析它如下所示:
cat test.json | jq -r '.employees[2].division'
它会运作良好并给出正确的结果:
Marketing * test
但我使用$()
,坏事会发生!
echo $(cat test.json | jq -r '.employees[2].division')
结果将列出当前文件夹下的所有文件名!喜欢:
my1.json my2.json test.json test ...
我想它$()
运行asterisk *
作为shell脚本,但是一个字符串。
那么当我使用*
时,如何在json文件中制作星号(jq
)就像一个字符串?我正在使用谷歌云平台和Ubuntu 17.10
始终在命令替换周围使用双引号,以避免*
被字面处理。 *
是shell中的一个特殊字符,它是一个通配符条目,可扩展到当前工作目录中的所有可用文件。你需要引用它来剥夺它的特殊含义(参考参数部分下的GNU bash man page)。
另外jq
可以直接处理文件,你可以避免使用无用的cat
。
result="$(jq -r '.employees[2].division' < test.json)"
echo "$result"
应该按预期产生结果。