Скрипт оболочки не читает файл, как ожидалось

Скрипт оболочки не читает файл, как ожидалось

Ниже приведен скрипт, который пытается выполниться:

read n
for ((i=1;i<=$n;i++))
do
file=createserver"$i".json
echo $file
instanceid[$i-1]=$(jq -r '.instance.id' ./$file)
echo $instanceid
done

$file отображает правильное значение. Однако $instanceid — нет. Вывод, который я получаю, следующий:

createserver1.json
a5a485df-b2e8-4467-9144-d012d96d0305
createserver2.json
**a5a485df-b2e8-4467-9144-d012d96d0305**

Выделенный жирным шрифтом выше не соответствует ожиданиям. Два файла, из которых получен идентификатор экземпляра, как присутствующий, и его содержимое следующее:

{"instance":{"id":"a5a485df-b2e8-4467-9144-d012d96d0305","os":"Ubuntu 18.04 LTS x64"}}
{"instance":{"id":"4a8ebe11-be1c-45f9-a82c-c41113ecd3a5","os":"Ubuntu 18.04 LTS x64"}}

Когда содержимое файлов отличается, почему скрипт всегда берет содержимое из самого первого файла. Я что-то упускаю? Пожалуйста, направьте.

решение1

Вы можете попробовать два способа:

read n
for ((i=1;i<=$n;i++))
do
file=createserver"$i".json
echo $file
instanceid[$i-1]=$(jq -r '.instance.id' ./$file)
echo ${instanceid[$i-1]}
done

или

read n
for ((i=1;i<=$n;i++))
do
file=createserver"$i".json
echo $file
instanceid[$i-1]=$(jq -r '.instance.id' ./$file)
done
for i in ${!instanceid[@]}; do echo ${instanceid[$i]}; done

Связанный контент