전역 변수의 일부인 지역 변수

전역 변수의 일부인 지역 변수

비슷한 문제에 대해 질문이 있습니다.이것질문이 있는데 지역 변수를 기반으로 전역 변수를 호출해야 합니다.

테스트, 스테이징 또는 프로덕션을 스크립트에 변수로 전달하고 싶다고 가정하면 다음과 같이 할 수 있습니다.

#!/bin/bash
env=$1

export ENV_$env=some_param

echo $ENV_${env}

그러나 전역 변수는 전혀 검색되지 않는 것 같습니다.

# ./script.sh test
test

이 스크립트의 사용 사례는 병렬로 작동하는 프로세스에 대한 격리를 제공하는 것입니다.

답변1

기반으로이 답변나는 사용한다고 믿는다

varname="ENV_$env"
echo ${!varname}

해결책이 될 수 있습니다.

답변2

export호출 범위 내에서 실행해 보세요 eval.

eval export ENV_${env}=some_param

ENV_${env}이렇게 하면 쉘에 할당을 시도하기 전에 예상한 이름 중 하나로 쉘이 적절하게 확장됩니다.

eval변수에 저장된 값을 검색할 때 다음도 사용해야 합니다.

eval echo \$ENV_$env

백슬래시를 참고하세요. 이는 쉘이 내장 변수를 사용하여 해당 부분을 확장할 $ENV_때까지 존재하지 않는 변수를 확장하려고 시도하는 것을 방지합니다 . 이 확장의 결과는 궁극적으로 에 전달되며 , 이는 동적 변수의 전체 이름을 가져와 확장하여 이전에 저장한 값을 생성합니다.$envevalecho

관련 정보