동적 변수를 기반으로 동적 변수를 할당하는 가장 간단한 방법은 무엇입니까?

동적 변수를 기반으로 동적 변수를 할당하는 가장 간단한 방법은 무엇입니까?

이것은 내 코드입니다.

$ abc_1='hello world'
$ abc_2='now is the time'
$ for i in {1..2}; do var=abc_$i;echo ${!var}; done

출력:
안녕하세요, 이제
시간입니다

do 루프 내의 두 명령문을 어떻게 더 간단하고 효율적인 명령문으로 결합할 수 있습니까?

나는 성공하지 않고 다음을 시도했습니다.

echo ${!abc_$i}  
echo ${!{abc_$i}}  
echo ${!abc_${i}}  
echo ${!abc_!{$i}}  

감사해요.

답변1

오, 자기야, 그러지 마세요. 숫자로 색인화된 데이터가 있는 경우 프로그래밍 언어에서와 마찬가지로 배열을 사용하십시오.

arr=('hello world' 'now is the time')
for i in "${!arr[@]}"; do
    printf "element at index %s is '%s'\n" "$i" "${arr[i]}"
done

문자열로 인덱스된 데이터가 있는 경우 연관 배열을 사용하십시오.

예를 들어 참조하십시오.https://mywiki.wooledge.org/BashGuide/Arrays

답변2

내 코드가 약간 보기 흉해졌지만 여기에는 다음과 같은 내용이 있습니다.

for i in {1..2}; do var="abc_$i";echo $(eval echo \$$var); done

아이디어는 변수 이름과 eval변수 사용법을 만드는 것입니다. echo백슬래시가 필요합니다. 그렇지 않으면 변수가 $$해석됩니다.

PS 어쩌면 배열 사용을 고려하는 것이 현명할 수도 있습니다.

관련 정보