JQ 1.5.3使用--arg选项管道输出时打印帮助信息问题求助
解决JQ 1.5.3中--arg与管道结合时输出帮助信息的问题
我来帮你搞定这个jq的问题!你遇到的核心问题是对--arg传入变量的引用方式错误,导致jq无法正确解析表达式,进而触发了帮助信息输出。
错误原因分析
你原来的命令里,虽然用--arg ZK="$ZK"把shell变量传入了jq,但在jq表达式中写的是contains("$ZK")——这里的"$ZK"是一个字符串字面量,而不是你通过--arg传入的变量。而且在jq的语法里,引用--arg的变量根本不需要加引号,错误的写法让jq误以为表达式有语法问题,所以直接输出了帮助信息。
另外,你用单引号包裹jq表达式的做法是对的(能避免shell提前解析$ZK),但错误的变量引用还是导致了问题。
修正后的命令
把表达式里的contains("$ZK")改成contains($ZK)即可,直接引用变量不需要加引号:
export ZK=x echo '{"jvm":{"value":"x"}}' | jq -c --arg ZK="$ZK" 'select(.jvm.value | contains($ZK))' | tail -n 1
执行这个命令后,就能得到你预期的结果:
{"jvm":{"value":"x"}}
额外提示
- 对于jq 1.5.3版本,这种
--arg变量的引用方式是完全兼容的,不用担心版本问题。 - 记住一个小规则:用
--arg传入的变量,在jq表达式里直接用$变量名调用就好,加引号只会把它当成普通字符串,反而会出问题。
内容的提问来源于stack exchange,提问作者dzieciou
相关产品推荐
相关产品推荐

