【问题标题】:dynamically creating bash variable and accessing its value defined earlier动态创建 bash 变量并访问其先前定义的值
【发布时间】:2015-01-12 06:05:41
【问题描述】:

我正在尝试读取之前定义的 bash 变量的值,但是这个变量名是动态派生的。

这是我正在尝试做的 bash 脚本

  $ mythreshold=10
  $ table=my
  $ threshold="$table"threshold
  $ echo $("$threshold")
   mythreshold

但是当我尝试读取这个变量值时

    $ echo $("$threshold")
    -bash: mythreshold: command not found

但是我期待它打印出来

  $ echo $("$threshold")
   10

有没有办法让我完成这项工作,它应该打印出上面定义的 mythreshold 变量的值

【问题讨论】:

    标签: linux bash shell scripting sh


    【解决方案1】:

    $() 是命令替换。它在内部运行命令并返回输出。变量名不是命令。

    您可以 $(echo "$threshold") 但这只会找回 mythreshold

    您需要indirection 才能满足您的需求。特别是Evaluating indirect/reference variables

    作为一个例子,对于这个特定的案例:

    echo "${!threshold}"
    

    【讨论】:

      【解决方案2】:

      使用 eval 命令:

      eval echo \${$threshold}
      

      关于这个命令的更多细节可以在这里找到:

      eval command in Bash and its typical uses

      【讨论】:

      • 嘘,嘶嘶声——eval 引入了错误空间(包括安全错误),而更传统的间接方法不会。请参阅 BashFAQ #48:mywiki.wooledge.org/BashFAQ/048
      • ...在这种特定情况下——考虑threshold是否包含,例如'mythreshold:-$(rm -rf /)'。安全的间接方法会抛出错误或评估为空字符串; eval 会擦除你的驱动器。
      • 否决推荐 eval 以完成 bash 提供明确支持的任务。
      猜你喜欢
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2015-07-01
      相关资源
      最近更新 更多