Shell 腳本未如預期讀取文件

Shell 腳本未如預期讀取文件

以下是嘗試執行的腳本:

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**

上面粗體的部分並不符合預期。捕獲實例 ID 的兩個檔案存在,其內容如下:

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

相關內容