나는 이것을 가지고있다:
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
.)