这是我需要parsing的JSON:
{"protocol-config":[ {"protocol":"p1","config-var1":"vc1","config-var2":"vc2"},{"protocol":"p2","config-var1":"vc3","config-var2":"vc4"} ]}
我的代码parsing如下:
declare -a vals=("var1" "var2") for val in "${vals[@]}"; then eval "result=($(cat $INPUT | jq -r --arg i "$i" --arg var "config-$val" '.protocol-config[$i | tonumber][$var]'))" done
问题是这个部分:
jq -r --arg i "$i" --arg var "config-$val" '.protocol-config[$i | tonumber][$var]'
我无法得到它的价值,我猜是因为我没有正确传递$ var? 我也试过了
UNIX新手:shell脚本没有运行,找不到命令
如何阅读使用“读”从文件描述符3在bash脚本?
这个sed命令是什么意思? sed's%^。* / %%'
jq -r --arg i "$i" --arg var "config-$val" '.protocol-config[$i | tonumber]["$var"]'
但它不工作..也许在“config- $ val”中的小“ – ”使它特别? 所以我的问题是什么是正确的方式来传递像jq中的“config- $ val”的参数?
任何帮助表示赞赏! 非常感谢!
如何在bash中计算arccos()?
头部是否会从标准input消耗额外的字符?
Bash脚本阻止所有苹果设备
Linux Bash和Windows Batch的自删除脚本
System.getenv没有得到〜/ .bash_profile中定义的variables
你的命令失败不是因为你循环错误或传递参数错误,而是因为protocol-config不是一个有效的标识符:
$ jq '.protocol-config' error: config is not defined
第一步应该总是找到一个没有循环或变量的命令。 不要试图为你无法运行的东西写一个循环! 不要概括一个你无法在特定情况下工作的命令!
$ jq -r '.["protocol-config"][0]["config-var1"]' < json vc1
现在我们可以尝试抽象出这些论点,进行测试以确保它仍然有效:
$ jq -r --arg i "0" --arg var "config-var1" '.["protocol-config"][$i|tonumber][$var]' < json vc1
现在我们已经有了获取单个项目的工作方式,我们可以使用循环多次执行此操作:
$ cat myscript i=0 file="json" for var in "var1" "var2" do jq -r --arg i "$i" --arg var "config-$var" '.["protocol-config"][$i|tonumber][$var]' < "$file" done $ bash myscript vc1 vc2
原来的问题陈述对我来说还不清楚,但是我怀疑不需要多次调用jq,甚至根本不需要使用任何bash脚本。 (jq很快,但启动起来会有一些开销。)
例如,假设您想要将“var”值的列表传递给jq程序。 这可以通过以下方式来完成:
$ jq -n --arg x '["var2","var2"]' '$x|fromjson' [ "var2","var2" ]
关于“startswith” – 目前jq的“stable”版本是1.4版本,自2014年6月以来已经发布; 它具有自2013年12月起可用的过滤器startswith / 1。有关可用下载的更多信息,请参阅:
http://stedolan.github.io/jq/download
https://github.com/stedolan/jq/releases
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。