为什么 jq 1.6 不接受此"if A then B end"语句?

  • 本文关键字:if then end 语句 jq 不接受 json jq
  • 更新时间 :
  • 英文 :


根据jq手册(条件和比较>if then else(:

if A then B endif A then B else . end相同。也就是说else分支是可选的,如果不存在则与..相同。。

这个堆栈溢出问题的公认答案也证实了这一点:JSON JQ if without else

那么为什么这个if A then B end语句会调用解析错误

$ jq --version
jq-1.6
$ echo 2 | jq 'if . == 0 then "zero" end'
jq: error: syntax error, unexpected end (Unix shell quoting issues?) at <top-level>, line 1:
if . == 0 then "zero" end                      
jq: error: Possibly unterminated 'if' statement at <top-level>, line 1:
if . == 0 then "zero" end
jq: 2 compile errors
$ echo 0 | jq 'if . == 0 then "zero" end'
jq: error: syntax error, unexpected end (Unix shell quoting issues?) at <top-level>, line 1:
if . == 0 then "zero" end                      
jq: error: Possibly unterminated 'if' statement at <top-level>, line 1:
if . == 0 then "zero" end
jq: 2 compile errors

我所理解的等价的if A then B else . end形式的语句似乎有效:

$ echo 2 | jq 'if . == 0 then "zero" else . end'
2
$ echo 0 | jq 'if . == 0 then "zero" else . end'
"zero"

我认为您看到的是jq开发版本的手册,而不是jq 1.6版本的手册。

最新更新