환경 변수를 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]]}"