Como eu armazeno o bash env vars no array e depois acesso / modifico?

0

Eu quero armazenar variáveis de ambiente em uma matriz bash e, em seguida, usá-las nos casos em que executo a mesma operação em todas elas (não configurado, exportar assim por diante). Por exemplo, se eu quiser imprimir todas as env vars no meu array:

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

O que não estou certo é como armazenar as variáveis em envVars e como usá-las no loop.

Meu objetivo é que a saída do loop acima seja:

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

Mas o que obtenho é isto:

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

Isso é possível? Como faço para configurar a matriz de nomes de variáveis de ambiente e, em seguida, usar ou modificar seus valores?

    
por John D 17.11.2016 / 14:25

1 resposta

2

Existem algumas peças diferentes para o que você parece estar tentando fazer.

Para unset de uma variável cujo nome está em outra variável, você pode usar -v so

unset -v "$currentEnvVar"

para essa parte. Veja aqui

Para atribuir a uma variável, você pode usar printf como

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

Para imprimir o valor, você pode usar uma referência indireta como

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

Na expansão de contraventamento, se o primeiro caractere for ! , o restante será tratado como o nome de uma variável que contém o nome da variável que você deseja realmente usar.

Você também pode usar uma matriz associativa , se ela atender às suas necessidades :

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