쉘의 for 루프에서 변수를 사용하고 싶습니다.
내 현재 코드:
VAA="1st_first"
VAB="2nd_second"
VAC="3rd_third"
for i in VAA VAB VAC; do
if [[ "${i}" =~ ^[A-Za-z]*$ ]]; then
echo "$i variable is a word"
else
echo "$i variable is not a word"
fi
done
예상되는 결과는 $VAR1, $VAR2 및 $VAR3 변수를 확인한 다음 단어로 인쇄하는 것입니다.
현재 출력은 다음과 같습니다:
VAA variable is a word
VAB variable is a word
VAC variable is a word
"$VAA"에 숫자가 포함되어 있으므로 이것은 올바르지 않습니다.
for 루프 외부에서 변수를 사용하는 방법은 무엇입니까?
답변1
저는 보통 이와 같은 문제를 해결하기 위해 연관 배열을 사용합니다. 그러나 이것이 유효한 해결책인지는 모르겠습니다. 그러나 이는 출력에 표시된 원래 순서를 보장하지 않습니다.
#!/bin/bash
declare -A varCheck
varCheck=( [VAA]="stfirst" [VAB]="2nd_second" [VAC]="3rd_third" )
for var in ${!varCheck[@]}; do
if [[ "${varCheck[$var]}" =~ ^[A-Za-z]*$ ]]; then
echo "${var} variable is a word"
else
echo "${var} variable is not a word"
fi
done
산출:
VAB variable is not a word
VAC variable is not a word
VAA variable is a word
답변2
변수 간접 사용
$i
iterator라는 단어가 표시됩니다 i
.
${!i}
변수의 내용이 표시됩니다. 이것은가변 간접.
그래서 사용해야 할 콘텐츠를 확인하려면${!i}
해결책은 다음과 같습니다.
VAA="1st_first"
VAB="2nd_second"
VAC="3rd_third"
for i in VAA VAB VAC; do
if [[ "${!i}" =~ ^[A-Za-z]*$ ]]; then
echo "$i variable is a word"
else
echo "$i variable is not a word"
fi
done
결과:
VAA variable is not a word
VAB variable is not a word
VAC variable is not a word