【发布时间】:2020-09-10 23:07:48
【问题描述】:
我知道 bash 支持使用 ! 运算符的间接变量引用:
$ ABC=123
$ DEF=ABC
$ echo ${!DEF}
123
这很好。但是 - 当我想设置一个变量的值时,它似乎不起作用,我从另一个变量中获得了它的名称:
$ ABC=123
$ DEF=ABC
$ !DEF=1234
-bash: !DEF=1234: event not found
$ ${!DEF}=1234
-bash: 123=1234: command not found
除了使用eval - 我如何设置名称是另一个变量的值的变量的值?
【问题讨论】:
-
您可以创建一个
nameref。请参阅man 1 bash - nameref 我认为这是 bash 4.x 的补充。 -
@DavidC.Rankin:任何 bash 版本都支持此功能,还是仅更新版本?
-
它将适用于较新的 4.x。添加 nameref 是为了绕过间接引用的限制。它仍然不完美。但它会在这里工作,例如
abc=123; declare -n ref=abc; ref=1234; echo $abc给你1234 -
自从 bash 4.0 于 2009 年发布——它应该涵盖任何当前的操作系统——除非它真的很旧。
-
declare -n在 4.3 版中引入。 Source
标签: bash variables indirection