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]]}"

おすすめ記事