Fre*_*ver 3 bash shell json sh jq
这里有一个名为 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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果我使用jq代码来解析它,如下所示:
cat test.json | jq -r '.employees[2].division'
Run Code Online (Sandbox Code Playgroud)
它将运行良好并给出正确的结果:
Marketing * test
Run Code Online (Sandbox Code Playgroud)
但我用了$(),坏事就会发生!
echo $(cat test.json | jq -r '.employees[2].division')
Run Code Online (Sandbox Code Playgroud)
结果将列出当前文件夹下的所有文件名!喜欢:
my1.json my2.json test.json test ...
Run Code Online (Sandbox Code Playgroud)
我猜它以 shell 脚本的形式$()运行星号*,但它是一个字符串。
那么当我使用时如何使*json 文件中的星号 ( ) 就像字符串一样jq?我使用的是Google云平台和Ubuntu 17.10
始终在命令替换周围使用双引号以避免*按字面意思处理。是*shell 中的一个特殊字符,它是一个通配符条目,可扩展到当前工作目录中的所有可用文件。您需要引用它以消除其特殊含义(请参阅参数部分下的GNU bash 手册页)。
也jq可以直接处理文件,可以避免无用的cat使用。
result="$(jq -r '.employees[2].division' < test.json)"
echo "$result"
Run Code Online (Sandbox Code Playgroud)
应该产生预期的结果。
| 归档时间: |
|
| 查看次数: |
2129 次 |
| 最近记录: |