这是一个名为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
)作为字符串?我正在使用Google云平台和Ubuntu 17.10
答案 0 :(得分:2)
始终在命令替换周围使用双引号以避免*
按字面处理。 *
是shell中的一个特殊字符,它是一个通配符条目,可扩展到当前工作目录中的所有可用文件。您需要引用它以剥夺其特殊含义(请参阅参数部分下的GNU bash man page)。
同样jq
可以直接处理文件,您可以避免无用的cat
使用。
result="$(jq -r '.employees[2].division' < test.json)"
echo "$result"
应按预期产生结果。