【发布时间】:2012-03-26 11:42:39
【问题描述】:
我想做的是跟随。在函数内部,我需要为一个变量赋值,该变量的名称取自另一个变量。换句话说:
func() {
#
# Here happens something that ultimately makes $arg="var_name"
#
declare -g ${arg}=5
}
func
echo ${var_name}; # Prints out "5"
上面的代码 sn-p 在 bash 4.2 中运行良好。但是,在 4.2 之前的 bash 中,declare 没有 -g 选项。我在 google 上找到的所有内容都表明要在函数中定义全局变量,我应该只使用 var=value 语法,但不幸的是 var 本身依赖于另一个变量。 ${arg}=5 也不起作用。 (上面写着-bash: var_name=5: command not found。
出于好奇,这一切的原因是该函数实际上是从脚本参数创建全局变量,即运行script --arg1=val 会自动创建名为arg1 的变量,其值为val。节省大量样板代码。
【问题讨论】:
-
您可以将 var=value 构造为字符串并使用 bash 内置命令
eval对其进行评估。 -
@minopret 你能重新发表你的评论作为答案吗?除非有人想出一个不那么骇人听闻的解决方案,否则我只会接受你的回答,它绝对有效。
-
> 运行
script --arg1=val会自动创建名为 arg1 的变量,其值为 val ermmm...你不能像arg1=val script那样运行它,它会在脚本运行期间设置吗?