运行下面的:
$ echo '["lorem", "ipsum", "dolor"]' | jq '. | contains(["rem"])'
返回true
,因为“rem”是“lorem”的子字符串。我想要一个完整的单词匹配,这将取消“rem”的资格,只允许输入三个值中的一个。
$ echo '["lorem", "ipsum", "dolor"]' | jq 'select(. | index("rem"))'
什么都不返回,但jq干净地退出了。我本来希望是false
。
我如何得到一个布尔值为整个词匹配?
2条答案
按热度按时间pkwftd7m1#
如果
any
(=至少一个)的项目等于(==
)一个给定的值,则希望接收true
:换句话说,如果给定值包含
IN
一组项目.[]
,则希望接收true
:eh57zj3b2#
我以前也被这个绊倒过很多次,因为你会期望它像这样开箱即用。
但答案(如果你在寻找一个可链接的退出代码)是:使用
-e
标志,根据man jq
:如果最后一个输出值既不是false也不是null,则将jq的退出状态设置为0;如果最后一个输出值是false或null,则设置为1;如果没有产生有效结果,则设置为4。通常,如果存在任何使用问题或系统错误,则jq退出2;如果存在jq程序编译错误,则设置为3;如果jq程序运行,则设置为0。
所以你需要
jq -e 'select(. | index("rem"))'