for 루프의 에코 변수 이름

for 루프의 에코 변수 이름

나는 이것을 가지고있다:

test1="1"
test2="2"
test3="3"

for i in "$test1" "$test2" "$test3"; do
        echo "$i"
done ;

$i내용이 아닌 변수 이름을 에코하고 싶습니다 .

에코 출력은 "test1", "test2" 또는 "test3"이어야 합니다.

어떻게 해야 하나요?

답변1

정말로 하고 싶다면 이렇게 하세요:

#!/bin/bash
test1='1'
test2='2'
test3='3'
for v in "test1" "test2" "test3"; do
        echo "The variable's name is $v"
        echo "The variable's content is ${!v}"
done 

하지만 당신은 아마도배열 사용을 선호합니다동적 변수 이름 대신 사용하는 것은 나쁜 습관으로 간주되어 코드를 이해하기 어렵게 만들 수 있습니다. 따라서 다음과 같은 더 나은 형식을 고려해보세요.

#!/bin/bash
test[0]='1'
test[1]='2'
test[2]='3'
for ((i=0;i<=2;i++)); do
        echo "The variable's name is \$test[$i]"
        echo "The variable's content is ${test[$i]}"

done 

답변2

작은따옴표를 사용하세요.

for i in '$test1' '$test2' '$test3'; do
    echo "$i"
done

그렇지 않으면 백슬래시를 사용하여 달러 기호를 이스케이프 처리합니다.

for i in \$test1 \$test2 \$test3; do
    echo "$i"
done

답변3

의미 for i in "$test1" "$test2" "$test3": $i유지됩니다콘텐츠세 가지 변수 test1, test2, test3 - 실제로는 1, 2, 3을 포함합니다.

인쇄하고 싶다면테스트 1,테스트 2그리고테스트 3기호 없이 호출 해야 합니다 $. 즉, 값이 아닌 실제 이름을 사용해야 합니다.

다음 코드( 변수 앞의 $이전 코드 없이) test1/2/3는 원하는 것을 인쇄합니다.

test1="1"
test2="2"
test3="3"

for i in "test1" "test2" "test3"; do
        echo "$i"
done ;

결과:

test1
test2
test3

답변4

ksh93 또는 배쉬:

$ test1=aa; test2=bb; test3=cc
$ for x in "${!test@}" ; do echo "$x" ; done 
test1
test2
test3

(변수는 어휘적으로 확장되므로 test10앞에 표시됩니다 test2.)

관련 정보