변수 간접 사용

변수 간접 사용

쉘의 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

변수 간접 사용

$iiterator라는 단어가 표시됩니다 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

관련 정보