Почему это утверждение «если A затем B конец» не принимается с jq 1.6? - PullRequest
1 голос
/ 04 марта 2020

Согласно руководству 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"

1 Ответ

2 голосов
/ 04 марта 2020

Я думаю, что вы смотрите руководство для версии разработки jq , а не руководство для версии jq 1.6 .

...