将jq中的变量传递给带有select的筛选器失败



当我这样做时:

$ jq -cr '.arr[]|select(.id==-1)|.desc' <<<$'{"arr":[{"id":-1,"desc":"foo"},{"id":100}]}'
foo

如预期工作。

但如果我试图传递一个变量来代替索引:

$ lookup=-1; jq -cr --arg l "$lookup" '.arr[]|select(.id==$l)|.desc' <<<$'{"arr":[{"id":-1,"desc":"foo"},{"id":100}]}'
no output

这次不产生输出。

如何修复此问题,使其与shell变量lookup一起工作?

使用--argjson而不是--arg

CCD_ 4使CCD_。对于--argjson l "$lookup",它被解释为JSON,在这种情况下是一个数字,就像您的工作示例.id==-1中的1一样。

或者执行一个额外的操作,将tonumber标志用于$l,表示您希望对传递的字符串值的数字等效值进行操作。即($l|tonumber)

最新更新