我有一个关于类似问题的问题这问题,但我需要根据本地变量调用全局变量。
假设我想将测试、登台或生产作为变量传递给脚本,我可能会这样做:
#!/bin/bash
env=$1
export ENV_$env=some_param
echo $ENV_${env}
但全局变量似乎根本没有被检索:
# ./script.sh test
test
该脚本的用例是为并行工作的进程提供隔离。
答案1
答案2
export
尝试在调用范围内执行eval
:
eval export ENV_${env}=some_param
这可以确保 shellENV_${env}
在尝试分配给它之前适当地扩展为您期望的名称之一。
eval
当尝试检索变量中存储的值时,您还需要使用:
eval echo \$ENV_$env
请注意反斜杠 - 它可以防止 shell 尝试扩展不存在的变量$ENV_
,直到它$env
使用内置变量扩展了该部分eval
。此扩展的结果最终传递给echo
,它接收动态变量的全名,并将其扩展以产生您之前存储在其中的值。