Bash 환경 변수를 배열에 저장한 다음 액세스/수정하는 방법은 무엇입니까?

Bash 환경 변수를 배열에 저장한 다음 액세스/수정하는 방법은 무엇입니까?

환경 변수를 bash 배열에 저장한 다음 모든 환경 변수(설정 해제, 내보내기 등)에 대해 동일한 작업을 수행하는 동안 이를 사용하고 싶습니다. 예를 들어 모든 환경 변수를 배열로 인쇄하려면 다음과 같이 하세요.

envVar1="firstVar"
envVar2="secondVar"
envVar3="thirdVar"
envVars=(envVar1 envVar2 envVar3)
for currentEnvVar in "${envVars[@]}" 
do
    # print env var name and value
    printf "Initial Value: %s = %s\n" "${currentEnvVar}" "${currentEnvVar}"
    # unset env var
    printf "Unsetting %s\n" "${currentEnvVar}"
    unset "${currentEnvVar}"

    # print env var name and value
    printf "Unset Variable (nothing should be to right of '=') %s = %s\n\n" "${currentEnvVar}" "${currentEnvVar}"

    # set env var 
    printf "Setting %s\n" "${currentEnvVar}"
    export "${currentEnvVar}"="${currentEnvVar}""_new"

    # print env var name and new value...
    printf "New Value %s =  %s\n\n" "${currentEnvVar}" "${currentEnvVar}"

done

내가 잘 모르는 것은 변수를 저장하는 방법 envVars과 루프에서 변수를 사용하는 방법입니다.

내 목표는 위 루프의 출력이 다음과 같다는 것입니다.

Initial Value: envVar1 = firstVar
Unsetting envVar1
Unset Variable (nothing should be to right of '=') envVar1 =

Setting envVar1
New Value envVar1 =  firstVar_new

Initial Value: envVar2 = secondVar
Unsetting envVar2
Unset Variable (nothing should be to right of '=') envVar2 =

Setting envVar2
New Value envVar2 =  secondVar_new

Initial Value: envVar3 = thirdVar
Unsetting envVar3
Unset Variable (nothing should be to right of '=') envVar3 =

Setting envVar3
New Value envVar3 = thirdVar_new

그러나 내가 얻는 것은 이것이다:

Initial Value: envVar1 = envVar1
Unsetting envVar1
Unset Variable (nothing should be to right of '=') envVar1 = envVar1

Setting envVar1
New Value envVar1 =  envVar1

Initial Value: envVar2 = envVar2
Unsetting envVar2
Unset Variable (nothing should be to right of '=') envVar2 = envVar2

Setting envVar2
New Value envVar2 =  envVar2

Initial Value: envVar3 = envVar3
Unsetting envVar3
Unset Variable (nothing should be to right of '=') envVar3 = envVar3

Setting envVar3
New Value envVar3 =  envVar3

가능합니까? 환경 변수 이름 배열을 설정한 다음 해당 값을 사용하거나 수정하려면 어떻게 해야 합니까?

답변1

당신이하려는 일에는 몇 가지 다른 부분이 있습니다.

unset이름이 다른 변수에 있는 변수 의 경우 -v다음과 같이 사용할 수 있습니다.

unset -v "$currentEnvVar"

그 부분에 대해서는. 바라보다여기

변수에 할당하려면 다음을 사용할 수 있습니다.printf좋다

printf -v "$currentEnvVar" %s 'new value'

사용할 수 있는 값을 인쇄하려면간접 참조좋다

printf 'The value is %s\n' "${!currentEnvVar}"

중괄호 확장에서 첫 번째 문자가 이면 !나머지 문자는 실제로 사용하려는 변수 이름을 포함하는 것으로 처리됩니다.

다음을 사용하는 것도 고려할 수 있습니다.연관 배열대신, 귀하의 필요에 맞는 경우:

declare -A envVarsByName
envVarsByName[$currentEnvVar]='new value'
printf 'New val: %s\n' "${envVarsByName[$currentEnvVar]]}"

관련 정보