【问题标题】:Assign to a variable whose name is stored in another variable in bash分配给一个变量,其名称存储在 bash 中的另一个变量中
【发布时间】:2018-07-20 04:04:34
【问题描述】:

如何分配一个变量,其名称存储在 bash 中的另一个变量中?类似的东西(示例不起作用):

foo=1    
a='foo'
$a=42    # This does not work:"bash: foo=42: command not found"
# Want foo == 42 here

【问题讨论】:

    标签: string bash variables


    【解决方案1】:

    您可以使用eval。例如:

    var1=abc
    
    eval $var1="value1"   # abc set to value1
    

    【讨论】:

    • 为什么这比例外答案更受欢迎。它是在之后创建的
    【解决方案2】:

    使用declare 指令:

    declare -- $a=42
    

    查看foo的内容:

    declare -p foo
    declare -- foo="42"
    
    echo "$foo"
    42
    

    【讨论】:

      【解决方案3】:

      你想要:

      eval "$a=42"
      

      例如:

      $ a=foo
      $ eval "$a=42"
      $ echo $foo
      42
      

      【讨论】:

      • 使用eval 是危险的。如果是a='date; foo',那么它将在将42 分配给foo 之前执行date 命令。现在想象一下如果date 被一些rm 命令替换。
      • @anubhava:是的,eval 很危险——你必须能够相信a 的来源(除其他外);如果保证来自您自己的脚本,这可能没问题。不幸的是,declare 并非在所有 shell 中都可用,尽管问题是关于 bash 所以它可以在这里使用。
      猜你喜欢
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      相关资源
      最近更新 更多