グローバル変数の一部であるローカル変数

グローバル変数の一部であるローカル変数

同様の問題について質問があります。これ質問がありますが、ローカル変数に基づいてグローバル変数を呼び出す必要があります。

テスト、ステージング、またはプロダクションをスクリプトに変数として渡したいと仮定すると、次のようにできます。

#!/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}これにより、シェルに割り当てを試みる前に、予想される名前の1つにシェルが適切に拡張されます。

eval変数に格納されている値を取得するときは、次のものも使用する必要があります。

eval echo \$ENV_$env

バックスラッシュを参照してください。これは、シェルが組み込み変数を使用してその部分を拡張する$ENV_まで存在しない変数を拡張しようとするのを防ぎます。この拡張の結果は最終的にに渡され、これは動的変数のフルネームを取得し、拡張して以前に保存した値を生成します。$envevalecho

関連情報