Создание массива из значений, запрошенных с помощью jq - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь создать массив с Jq

Мой код:

all='('$(cat players_temp.json | jq -r  '.item1.items[1].firstName, .item1.items[1].lastName')')'

Это дает вывод

$ echo $all
(Luka Modrić)

$ echo $all[1]
(Luka Modrić)[1]

, как вы можете видеть массивне работает как массив. Я ожидал этого:

$ echo $all[1]
Modrić

1 Ответ

2 голосов
/ 18 октября 2019

Чтобы создать массив bash из выходных данных jq, см., Например, следующую страницу SO:

Как преобразовать массив json в массив строк bash с помощью jq?

Чтобы понять, почему ваш подход не удался, рассмотрим следующую запись сеанса с оболочкой bash:

$ all='('"Luka Modrić"')'
$ echo $all
(Luka Modrić)

$ echo $all[1]
(Luka Modrić)[1]

Это существенно показывает, что ваш вопрос не имеет никакого отношения к jq вообще.

Есливы хотите, чтобы $all был массивом, состоящим из двух строк "Luka" и "Modrić", тогда вы могли бы написать:

$ all=("Luca" "Modrić")
echo ${all[1]}
Modrić
$ echo ${all[0]}
Luca

Обратите внимание на правильный синтаксис bash для массивов, и что источник индекса равен 0.

Сводка

  1. См. Вышеупомянутую страницу SO для альтернативных способов создания массива bash из вывода jq.

  2. Синтаксис для создания массива bash из набора строк можно обобщить следующим образом:

    ary = (v0 ...)

  3. Если ary является массивом bash, $ {ary [i]} - это i-й элемент, где i находится в диапазоне от 0 до $ {# ary [@]} - 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...