【问题标题】:Why is this "if A then B end" statement not accepted with jq 1.6?为什么 jq 1.6 不接受这个“if A then B end”语句?
【发布时间】:2020-03-04 01:05:46
【问题描述】:

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

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

这个 Stack Overflow 问题的公认答案证实了这一点: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"

【问题讨论】:

    标签: json jq


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 2013-09-11
      • 2019-06-18
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多