macos中的OK示例:
jq版本
jq-1.6
代码
a='[{"a":"b"},{"c":"d c"}]'
b="d c"
echo $a|jq '.[]|select(.c == "'$b'")'
输出
{
"c": "d c"
}
linux下的KO示例:
jq版本
jq-1.5-1-a5b5cbe
代码
a='[{"a":"b"},{"c":"d c"}]'
b="d c"
echo $a|jq '.[]|select(.c == "'$b'")'
输出
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
如上所述,在linux env和macos env之间,jq的select函数中的空格扩展有所不同。我已经尝试在linux环境下下载jq-1.6,但它也产生了像上面的例子在linux KO的问题。linux版本的jq还有bug吗?有没有人能用另一种很好的方法来实现上述功能?我在shell中使用jq来解析数据库信息,获取指定的内容。先谢谢你了!
1条答案
按热度按时间c86crjj01#
$b
的值中有一个空格。因此,当展开时,jq有两个参数,一个是.[]|select(.c == "d
,另一个是c")
。如果你想正确地注入带有空格的变量,请引用shell变量:
更好的是,不要将数据注入到代码中,使用惯用的方式将字符串导入到jq中,并使用专用的
--arg
选项: