bash 中关联数组的动态名称

dynamic name for associative array in bash

我需要对 bash 中的几个不同的关联数组执行相同的操作。因此,我想使用函数来避免代码重复。但是,我无法访问函数内的数据。这是一个简单的例子:

#!/bin/bash

# this function works fine
function setValue() {
    #   array name
    #   array index
    #   new value
    declare -g []=
}

# this function doesn't
function echoValue() {
    #   array name
    #   array index
    echo ${[]}
}

declare -A arr1=( [v1]=12 [v2]=31 )
setValue arr1 v1 55
echoValue arr1 v2

我已经尝试了 ${$1[$2]}、${!1[!2]} 和所有其他可能的组合,但是 none 这些都有效。如何使用动态而不是硬编码的数组名称和索引来访问这些值?如有任何建议,我将不胜感激。

在Bash中,在函数外部声明的变量可以用作全局变量。这意味着您可以从 bash 函数内部 call/access 它们,而无需在函数内部将变量作为参数传递。

一个例子:

#!/bin/bash

function setValue() {
  arr1[v1]=55 
}

function echoValue() {  
    echo ${arr1[v2]} 
}

declare -A arr1=( [v1]=12 [v2]=31 )  
setValue 
echoValue

echo ${arr1[*]}

输出是:

31
31 55

我建议看一下这个Bash Variable Tutorial

间接参数扩展需要数组名和索引一起

echoValue () {
    #   array name
    #   array index
    t="[]"
    echo "${!t}"
}

另一个解决方案

函数回显值() { 本地海峡 str="echo "'$'"{$1""[$2]}" 评估 $str }