【发布时间】: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