Вот так:
for id in $(jq -r '.all[].id' <<< "$json"); do
echo "$id"
done
Обратите внимание, что параметр -r
необходимо использовать, если вы хотите удалить двойные кавычки:
· --raw-output / -r:
With this option, if the filter´s result is a string then
it will be written directly to standard output rather than
being formatted as a JSON string with quotes. This can be
useful for making jq filters talk to non-JSON-based
systems.
ВесьСценарий может выглядеть следующим образом:
#!/usr/bin/env bash
json='{
"all":[
{
"id":"51a"
},
{
"id":"52b"
},
{
"id":"53c"
}
]
}'
for id in $(jq -r '.all[].id' <<< "$json"); do
echo "$id"
done
Но, как отмечено в комментариях, for x in $(...)
является антипаттерном и не должен использоваться: https://mywiki.wooledge.org/DontReadLinesWithFor.
Чтобы назначить два индекса двум отдельнымпеременные:
#!/usr/bin/env bash
json='{
"all":[
{
"id":"51a",
"name":"Steve"
},
{
"id":"52b",
"name":"Phoebe"
},
{
"id":"53c",
"name":"Dino"
}
]
}'
jq -r '.all[] | .id + " " + .name' <<< "$json" |
while read -r id name; do
echo id: "$id"
echo name: "$name"
done