Yay*_*uan 1 linux bash x86-64 jq
jq-1.6
Run Code Online (Sandbox Code Playgroud)
a='[{"a":"b"},{"c":"d c"}]'
b="d c"
echo $a|jq '.[]|select(.c == "'$b'")'
Run Code Online (Sandbox Code Playgroud)
{
"c": "d c"
}
Run Code Online (Sandbox Code Playgroud)
jq-1.5-1-a5b5cbe
Run Code Online (Sandbox Code Playgroud)
a='[{"a":"b"},{"c":"d c"}]'
b="d c"
echo $a|jq '.[]|select(.c == "'$b'")'
Run Code Online (Sandbox Code Playgroud)
jq: error: syntax error, unexpected $end, expecting QQSTRING_TEXT or QQSTRING_INTERP_START or QQSTRING_END (Unix shell quoting issues?) at <top-level>, line 1:
.[]|select(.c == "d
jq: 1 compile error
Run Code Online (Sandbox Code Playgroud)
如上,linux环境和macos环境下jq的select函数中的空格扩展是有区别的。我已经尝试在linux环境中下载jq-1.6,但它也产生了像上面的linux示例KO一样的问题。linux版本的jq还存在bug吗?有人能以另一种很好的方式来实现上述功能吗?我在 shell 中使用 jq 来解析数据库信息并获取指定内容...提前致谢!
的值中有一个空格$b。因此,当展开时,您最终会得到 jq 的两个参数,一个是.[]|select(.c == "d,另一个是c")。
如果您想正确地用空格注入变量,请引用 shell 变量:
echo "$a" | jq '.[]|select(.c == "'"$b"'")'
Run Code Online (Sandbox Code Playgroud)
更好的是,不要将数据注入到代码中,而是使用惯用的方式通过专用--arg选项将字符串导入到 jq 中:
echo "$a" | jq '.[]|select(.c == "'"$b"'")'
Run Code Online (Sandbox Code Playgroud)