이것은 내 코드입니다.
$ 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 어쩌면 배열 사용을 고려하는 것이 현명할 수도 있습니다.