当我这样做时:
$ 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)