Мне нужно выполнить cat build.json | jq '.Stage*.Name'
5 раз, где *
— число от 1 до 5.
Я пробовал это:
for (( c=1; c<5; c++ ))
do
echo $c
cat build.json | jq '.Stage${c}.Name'
done
И я получил эту ошибку:
jq: error: syntax error, unexpected '$', expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.Stage${c}.Name
jq: 1 compile error
Как мне это сделать правильно?
Для записи вам понадобятся двойные кавычки, чтобы это работало; но использование --arg
— гораздо лучшее решение. Смотрите также stackoverflow.com/questions/6697753/…
Рассмотрим следующий файл json (./json.json
):
{
"data": {
"stage1": {
"name": 1
},
"stage2": {
"name": 2
},
"stage3": {
"name": 3
},
"stage4": {
"name": 4
},
"stage5": {
"name": 5
}
}
}
С этой настройкой вы можете использовать аргумент jq для разбора вашего итератора:
#!/bin/bash
for (( i = 1; i <= 5; i++ )); do
echo "i: $i"
jq --arg i $i '.data.stage'$i'.name' < json.json
done
Создание следующего вывода:
i: 1
1
i: 2
2
i: 3
3
i: 4
4
i: 5
5
Я не уверен, что вам действительно нужен здесь цикл оболочки. Какова собственно задача?