Как проверить, есть ли точное совпадение в списке jq

Я пытаюсь найти тег, соответствующий определенному репозиторию изображений в реестре Docker.

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list\

result: {"name":"ancean-api","tags":["v1.0.0","v19.0.0","v11.1.1"]}

Как проверить, существует ли тег v1.0.0(example) в выходных данных json, как показано выше?


Я пытался

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq '.tags | select(. == v1.0.19)'

jq-документ Документ jq попытался использовать select, но потерпел неудачу. Приведенная выше команда успешна независимо от того, какой тег используется.

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq '.tags | .[]' | grep "v1.0.0"

Я пытался использовать его с grep, но безуспешно.


Проблема решена

Через ответ в личку решил проблему с функцией IN.

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq IN'(.tags[]; "v1.0.0")'

Используя IN, я смог вернуть значение bool, когда в данных json было определенное значение.

🤔 А знаете ли вы, что...
Shell обладает возможностью работы с удаленными серверами с помощью SSH.


50
1

Ответ:

Решено

Если объект, содержащий ключ tags, находится внутри ключа default другого объекта (как показано в вашем примере, хотя кавычки отсутствуют), вам необходимо включить его в путь.

Там вы можете использовать функцию IN для проверки содержания рассматриваемого элемента, которая выдает логическое значение:

IN(.default.tags[]; "v1.0.0")

Кроме того, флаг --exit-status (или -e) может устанавливать статус выхода в зависимости от результата.