Jq не возвращает ненулевое значение для пустого ввода

У меня есть эта строка кода, которая работает так, как ожидалось:

echo '{"slot":"we"}' | jq -re '.slot' || exit 1

однако этот код не вызывает ошибки, хотя я этого и ожидал:

echo ' ' | jq -re '.slot' || exit 1

и это тоже не так:

echo '' | jq -re '.slot' || exit 1

как я могу убедиться, что выдается ошибка, если ключ slot не найден? Я имею в виду, что в обоих последних двух примерах код выхода равен 0.

Это может быть вашей проблемой: echo '' | jq -e '.slot' выход с кодом 0 для более старых версий jq (до jq 1.6 включительно). Начиная с jq 1.7, он завершается с кодом 4. (См. #1697)

pmf 25.04.2024 10:51

На вопрос «как я могу убедиться, что он выдает ошибку, если ключ «слота» не найден?»: проверьте его, используя has/1, и вызовите один из error/0, error/1, halt_error/0 или halt_error/1 в соответствии с окружающей логикой.

pmf 25.04.2024 11:02
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш код отлично работает с jq 1.7. Если вы используете jq 1.6, вам нужно это:

jq -nre 'inputs.slot'

Другие вопросы по теме