我想做的就是跟随。在函数内部,我需要为一个变量赋值,该变量的名称取自另一个变量。换句话说:
func() {
#
# Here happens something that ultimately makes $arg="var_name"
#
declare -g ${arg}=5
}
func
echo ${var_name}; # Prints out "5"
上面的代码片段在 bash 4.2 中运行良好。但是,在 4.2 之前的 bash 中,declare
没有 -g
选项。我在谷歌上找到的所有内容都说要在函数内定义全局变量,我应该只使用 var=value
语法,但不幸的是var
本身取决于另一个变量。 ${arg}=5
也不起作用。 (上面写着 -bash: var_name=5: command not found
。
出于好奇,这一切的原因是这个函数实际上从脚本参数创建了全局变量,即运行 script --arg1=val
自动创建名为 arg1
的变量具有值(value) val
.节省大量样板代码。
最佳答案
函数内的
declare
未按预期工作。
我需要在函数中声明的只读全局变量。
我在一个函数中试过这个,但没有用:
declare -r MY_VAR=1
但这没有用。使用 readonly
命令可以:
func() {
readonly MY_VAR=1
}
func
echo $MY_VAR
MY_VAR=2
这将打印 1 并为第二次赋值给出错误“MY_VAR:只读变量”。
关于bash - 在函数内声明全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9871458/