根据jq
手册(条件和比较> if-then-else):
相同
if A then B end
与if 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"