다른 변수 내의 변수에 값을 전달하는 방법

다른 변수 내의 변수에 값을 전달하는 방법

이 코드를 실행할 때 "잘못된 대체" 오류가 발생합니다. 루프를 사용하여 h_1, h_2의 값을 인쇄하고 싶습니다 .h_3for

#/!/bin/bash
h_1=12
h_2=13
h_3=14
for ((i=1; i<=2; i++))
 do
  echo "${h_$i}"
done

답변1

당신은 사용해야합니다간접 매개변수 확장그리고 !:

tmp=h_$i
echo "${!tmp}

여기에 추가 변수를 만들어야 합니다 tmp. 불행히도 문자열만 사용할 수는 없습니다. 간접 확장은 다음과 같이 작동합니다.

매개변수의 첫 번째 문자가 느낌표(!)인 경우 1단계 변수 간접 지정이 도입됩니다. Bash는 나머지 인수로 구성된 변수 값을 변수 이름으로 사용합니다. 그런 다음 해당 변수를 확장하고 인수 자체의 값이 아닌 나머지 대체에 해당 값을 사용합니다. 이를 간접 확장이라고 합니다.

따라서 위의 내용은 ${!tmp}이름이 다음과 같은 변수의 값으로 확장됩니다.변수 tmp.

또한 사용할 수 있습니다eval여기서는 간접적인 접근 방식이 더 깔끔합니다.

답변2

나는 이중 괄호 형식을 사용하겠습니다.Arithmetic Expansion:

echo $((h_$i))

배열, 임시 변수 또는 기타 멋진 것들이 필요하지 않습니다. 또한 나는 이 형식이 가장 이식성이 있다고 생각합니다(내가 아는 한 POSIX에는 산술 확장이 필요합니다).

Bash 매뉴얼에서:

산술 확장을 사용하면 산술 표현식을 평가하고 결과를 바꿀 수 있습니다. 산술 확장의 형식은 다음과 같습니다.

          $((expression))

표현식은 큰따옴표로 묶인 것처럼 처리되지만, 괄호 안의 큰따옴표는 특별히 처리되지 않습니다. 표현식의 모든 토큰은 매개변수 확장, 문자열 확장, 명령 대체 및 따옴표 제거를 거칩니다. 산술 확장은 중첩될 수 있습니다.

관련 정보