如何解决jq --arg将变量传递给select在没有硬代码值的情况下不起作用?
嗨,我正在尝试将变量传递给jq,但不明白为什么有些--arg
变量起作用而有些不起作用。
jq --version
jq-1.6
示例不适用于.Value <=$v
,而是返回所有甚至大于10且不小于或小于10的值。
h=hostname
ip=ipaddress
value=10
jq -r --arg i $ip --arg host $h --arg v $value 'select(.Value <=$v and .ClientRequestHost == $host and .ClientIP == $i)' file.json
如果.Value在select()
中硬编码为10 .Value <=10
并过滤.Value小于或等于10的输出,则可以工作
h=hostname
ip=ipaddress
value=10
jq -r --arg i $ip --arg host $h --arg v $value 'select(.Value <=10 and .ClientRequestHost == $host and .ClientIP == $i)' file.json
在两个示例中,传递给jq select的$ h和$ i变量都起作用,而$ v变量不起作用?
解决方法
找到我的答案的原因是--arg传递的变量是字符串,不能解释为数字https://stackoverflow.com/a/41773407/272648,因此需要进行转换
jq -r --arg i $ip --arg host $h --arg v $value 'select(.Value <=($v | tonumber) and .ClientRequestHost == $host and .ClientIP == $i)' file.json
,
或使用命令行选项-—argjson
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。