如何动态生成环境变量名并导出

San*_*gde 6 command-line bash scripts environment-variables

我想动态生成环境变量名称并将值设置为该变量。我写了一个shell脚本如下。

temp="$(date +%s)"
echo $temp
export ${temp} = "Test value"
echo "Pass variable ${temp}"
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,生成的时间戳应该是键,“测试值”是该键的值。此键和值必须导出到会话。

如何使用 shell 脚本实现这一点?

jan*_*nos 6

您可以使用printf -v动态创建变量,例如:

temp=somename
echo $temp
printf -v $temp "Test value"
echo $somename
Run Code Online (Sandbox Code Playgroud)

这将输出“测试值”。

请注意,这temp="$(date +%s)"不起作用,因为 的输出$(date +%s)是数字,并且 Bash 中的变量名称不能以数字开头。您必须给它一个非数字前缀,例如:

temp="t$(date +%s)"
Run Code Online (Sandbox Code Playgroud)

要导出变量,您只需执行以下操作:

export $temp
Run Code Online (Sandbox Code Playgroud)

这是一个完整的示例,证明变量确实在环境中导出:

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

输出例如:

t1486060416
Test value
Run Code Online (Sandbox Code Playgroud)