2016-09-21 104 views
0

我最近的任务之一就是在Linux Shell中创建一个字典结构。我曾尝试下面做这个方法一码bash脚本字典通过键获取值?

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 

能获得价值“你好”,但我怎么能得到方法2打印使用$温度相同的值?

+0

您正在寻找间接变量。见例如http://stackoverflow.com/questions/8515411/bash-indirect-expansion-please-explain – tripleee

+0

如果你遇到了需要这种编程的地方,那么:Bash是工作的错误语言,或者你的设计需求重新思考。如果你不是经验丰富的编剧,这一点尤其重要。还要注意,在_Approach 1_中,'eval'是无用的;更一般地说,'eval'的这种用法是非常危险的,因为它们会导致任意代码执行。 –

+0

如果您发现自己需要通过包含参数名称的字符串间接引用参数,那么这就表明您有设计问题。它可能是一种语言不匹配(例如,bash没有嵌套结构或将整个关联数组传递给函数的方法),但它也可能是一个糟糕的设计决策。无论如何,我会花一些时间重新思考。 –

回答

0

您将需要引入一个新变量,因为bash/sh不会执行嵌套扩展。然后作出间接参考和瞧:

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