쉘 스크립트가 예상대로 파일을 읽지 못함

쉘 스크립트가 예상대로 파일을 읽지 못함

다음은 실행하려는 스크립트입니다.

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

관련 정보