Я использую приведенную ниже таблицу, которая работает отлично, но я хочу добавить еще одну переменную к фильтрации, желательно «содержит», поскольку я хочу отфильтровать ее на основе поля ОС, которое содержит разные строки:
curl -H "Принять: application/json; indent=4" -H "Авторизация: токен $token" "$url_devices" -k | jq -r --arg устройство "$device" '.results[] | select(.cluster.name == $cluster) | .primary_ip.address'
Заранее спасибо! Я попробовал следующий код, но он не сработал:
curl -H "Принять: application/json; indent=4" -H "Авторизация: токен $token" "$url_devices" -k | jq -r --arg устройство "$device" '.results[] | select(.cluster.name == $cluster И .cluster.os == $os) | .primary_ip.address'

Вы можете легко объединить несколько фильтров select:
.results[]
| select(.cluster.name == $cluster)
| select(.cluster.os == $os)
| .primary_ip.address
или объедините несколько предикатов с помощью и (обратите внимание на регистр):
.results[]
| select(.cluster.name == $cluster and .cluster.os == $os)
| .primary_ip.address
Результат идентичен.
Чтобы проверить, содержит ли строка другую подстроку, вы должны использовать:
.results[]
| select(.cluster.name == $cluster)
| select(.cluster.os | contains($os))
| .primary_ip.address
Используйте (еще одну) опцию
--arg, чтобы определить дополнительные внешние значения. (Обратите внимание, что в вашем «рабочем» подходе определение только переменнойdevice, а затем использование$clusterвместо нее не будет работать.) Что касается «поля, которое содержит разные строки», вам нужно будет быть более конкретным, чтобы получить помощь по этому вопросу. .