bash - 在函数内声明全局变量

标签 bash shell scope

我想做的就是跟随。在函数内部,我需要为一个变量赋值,该变量的名称取自另一个变量。换句话说:

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/

相关文章:

bash - 多个变量的列总和

linux - Shell 脚本使用 netstat 查明某个端口是否正在被监听?

scope - ApiResource 中使用的 Claims 和 IdentityServer4 中的 Scope 有什么不同

swift - public static vs open static vs public class vs open class?

bash - sed 中的命令替换

Cygwin 中的 bash shell

shell - 无法使用 oozie 运行 shell 脚本

ruby-on-rails - VSCode 将调试 shell 更改为 Windows 上的 bash

linux - 无法通过 bash 文件跟踪错误

Javascript 作用域链