Согласно руководству jq
(Условия и сравнения> if-then-else):
if A then B end
совпадает с if A then B else . end
. То есть ветвь else является необязательной, и, если отсутствует, совпадает с ..
То же самое подтверждается принятым ответом на этот вопрос переполнения стека: JSON JQ, если без иначе
Итак почему этот оператор 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"