【问题标题】:Indirect lvalue reference in bash [duplicate]bash中的间接左值引用[重复]
【发布时间】: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


【解决方案1】:

关于您的问题

...我想设置一个变量的值,我从另一个变量中获取其名称... 如何设置名称为另一个变量值的变量的值?

您可以在Dynamic variable names in Bash 中找到答案。还有其他选项,例如readprintfdeclare

您可以在

下找到更多信息

Why should eval be avoided in Bash, and what should I use instead? 关于如何使eval 安全?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多