web-dev-qa-db-ja.com

環境変数名を動的に生成してエクスポートする方法

環境変数名を動的に生成し、その変数に値を設定したい。以下のようにシェルスクリプトを作成しました。

temp="$(date +%s)"
echo $temp
export ${temp} = "Test value"
echo "Pass variable ${temp}"

上記のコードでは、生成されたタイムスタンプがキーであり、「テスト値」はそのキーの値です。このキーと値は、セッションにエクスポートする必要があります。

シェルスクリプトを使用してこれを達成するにはどうすればよいですか?

5
Santosh Hegde

printf -vを使用して、変数を動的に作成できます。次に例を示します。

temp=somename
echo $temp
printf -v $temp "Test value"
echo $somename

これにより、「テスト値」が出力されます。

temp="$(date +%s)"の出力は数値であり、Bashの変数名は数字で始めることができないため、$(date +%s)は機能しないことに注意してください。たとえば、数値以外のプレフィックスを指定する必要があります。

temp="t$(date +%s)"

変数をエクスポートするには、次のようにします。

export $temp

以下は、変数が実際に環境にエクスポートされることを証明する完全な例です。

temp=t$(date +%s)
echo $temp
printf -v $temp "Test value"
export $temp
sh -c "echo \$$temp"

たとえば、出力:

t1486060416
Test value
4
janos