Как избежать $ в значении поля - PullRequest
0 голосов
/ 04 мая 2020

Необходимо получить значение id, которое соответствует name='robot$deployer'. Как можно избежать $, чтобы jq выбирал только идентификатор коррекции (1321) вместо обоих (1321 и 1326)? В настоящее время скрипт ниже с печатью обоих идентификаторов

[
  {
    "id": 1321,
    "name": "robot$deployer",
    "token": "",
    "description": "deployer",
    "project_id": 55,
    "expires_at": 1590799816,
    "disabled": false,
    "creation_time": "2020-04-29T10:50:16.029882-07:00",
    "update_time": "2020-04-29T10:50:16.029882-07:00"
  },
  {
    "id": 1326,
    "name": "robot$test",
    "token": "",
    "description": "test",
    "project_id": 55,
    "expires_at": 1590862956,
    "disabled": false,
    "creation_time": "2020-04-30T04:22:36.940445-07:00",
    "update_time": "2020-04-30T04:22:36.940445-07:00"
  }
]

тестовый скрипт

#!/bin/bash

export PROJECT_INFO='[ { "id": 1321, "name": "robot$deployer", "token": "", "description": "deployer", "project_id": 55, "expires_at": 1590799816, "disabled": false, "creation_time": "2020-04-29T10:50:16.029882-07:00", "update_time": "2020-04-29T10:50:16.029882-07:00" }, { "id": 1326, "name": "robot$test", "token": "", "description": "test", "project_id": 55, "expires_at": 1590862956, "disabled": false, "creation_time": "2020-04-30T04:22:36.940445-07:00", "update_time": "2020-04-30T04:22:36.940445-07:00" } ]'

ROBOT_LOGIN="robot\$deployer"
export ROBOT_ID=$(echo $PROJECT_INFO | jq --arg robot_name "$ROBOT_LOGIN" 'if .[].name == "robot$deployer" then .[].id else empty end')
echo "ROBOT_ID:" $ROBOT_ID

Обновлена ​​рабочая версия скрипта , thx @ hobbs

export PROJECT_INFO='[ { "id": 1321, "name": "robot$deployer", "token": "", "description": "deployer", "project_id": 55, "expires_at": 1590799816, "disabled": false, "creation_time": "2020-04-29T10:50:16.029882-07:00", "update_time": "2020-04-29T10:50:16.029882-07:00" }, { "id": 1326, "name": "robot$test", "token": "", "description": "test", "project_id": 55, "expires_at": 1590862956, "disabled": false, "creation_time": "2020-04-30T04:22:36.940445-07:00", "update_time": "2020-04-30T04:22:36.940445-07:00" } ]'

ROBOT_LOGIN="robot\$deployer"
export ROBOT_ID=$(echo $PROJECT_INFO | jq --arg rl "${ROBOT_LOGIN}" '.[] | select(.name == $rl) | .id')
echo "ROBOT_ID:" $ROBOT_ID

1 Ответ

1 голос
/ 04 мая 2020

То, что вы пытались сделать, обрабатывается функцией jq select:

ROBOT_ID=$(jq '.[] | select(.name == "robot$deployer") | .id')
...