局部变量作为全局变量的一部分

局部变量作为全局变量的一部分

我有一个关于类似问题的问题问题,但我需要根据本地变量调用全局变量。

假设我想将测试、登台或生产作为变量传递给脚本,我可能会这样做:

#!/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

这可以确保 shellENV_${env}在尝试分配给它之前适当地扩展为您期望的名称之一。

eval当尝试检索变量中存储的值时,您还需要使用:

eval echo \$ENV_$env

请注意反斜杠 - 它可以防止 shell 尝试扩展不存在的变量$ENV_,直到它$env使用内置变量扩展了该部分eval。此扩展的结果最终传递给echo,它接收动态变量的全名,并将其扩展以产生您之前存储在其中的值。

相关内容