Das Shell-Skript liest die Datei nicht wie erwartet.

Das Shell-Skript liest die Datei nicht wie erwartet.

Unten ist das Skript, das ausgeführt werden soll:

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 zeigt den korrekten Wert an. $instanceid jedoch nicht. Die Ausgabe, die ich erhalte, ist wie folgt:

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

Die fettgedruckte oben ist nicht wie erwartet. Die beiden Dateien, aus denen die Instanz-ID erfasst wird, sind vorhanden und ihr Inhalt lautet wie folgt:

{"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"}}

Wenn der Inhalt der Dateien unterschiedlich ist, warum übernimmt das Skript dann immer den Inhalt aus der ersten Datei selbst? Übersehe ich etwas? Bitte führen Sie mich.

Antwort1

Sie können es auf zwei Arten versuchen:

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

oder

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

verwandte Informationen