微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

js in shellscript:用' – 'parsing参数

这是我需要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? 我也试过了

删除超过30天的文件,而不使用find,使用shell脚本

UNIX新手:shell脚本没有运行,找不到命令

如何阅读使用“读”从文件描述符3在bash脚本?

这个sed命令是什么意思? sed's%^。* / %%'

我怎样才能发送错误输出到标准输出文件在bash中

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

第一步应该总是找到一个没有循环或变量的命令。 不要试图为你无法运行的东西写一个循环! 不要概括一个你无法在特定情况下工作的命令!

这是一个从索引0获取config-var1的工作命令。

$ 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] 举报,一经查实,本站将立刻删除。

相关推荐