【问题标题】:bash script dictionary get values by key?bash脚本字典按键获取值?
【发布时间】:2017-01-29 20:51:43
【问题描述】:

我最近的一项任务包括在 Linux Shell 中创建字典结构。我试过下面的代码

    declare -A item_1
    item_1["value"]="hello"
    temp=item_1
    eval result="${item_1["value"]}" #Approach 1
    eval result="${$temp["value"]}" #Approach 2
    echo $result

通过这样做,方法 1 可以获得值“hello”,但我怎样才能让方法 2 使用 $temp 打印相同的值?

【问题讨论】:

  • 您正在寻找间接变量。参见例如stackoverflow.com/questions/8515411/…
  • 如果您遇到需要这种编程的地步,那么:要么 Bash 不适合这项工作,要么您的设计需要重新思考。如果您不是经验丰富的脚本编写者,则尤其如此。另请注意,在 Approach 1 中,eval 是无用的;更一般地说,eval 的这种用法非常危险,因为它们可能导致任意代码执行。
  • 如果您发现自己需要通过包含参数名称的字符串间接引用参数,这表明您有设计问题。这可能是语言不匹配(例如 bash 没有嵌套结构或将整个关联数组传递给函数的方法),但这也可能是一个糟糕的设计决策。无论哪种方式,我都会花一些时间重新考虑。

标签: bash shell dictionary eval associative-array


【解决方案1】:

您需要引入一个新变量,因为 bash/sh 不进行嵌套扩展。然后进行间接引用,瞧:

temp_expr="$temp[value]"
result=${!temp_expr}

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 2014-06-11
    • 2011-12-22
    • 2022-12-05
    • 2013-01-02
    相关资源
    最近更新 更多