我需要在bash中的几个不同的关联数组上执行相同的操作。因此,我想使用函数来避免代码重复。但是,我在访问函数内部的数据时遇到麻烦。这是一个简单的示例:
#!/bin/bash
# this function works fine
function setValue() {
# $1 array name
# $2 array index
# $3 new value
declare -g $1[$2]=$3
}
# this function doesn't
function echoValue() {
# $1 array name
# $2 array index
echo ${$1[$2]}
}
declare -A arr1=( [v1]=12 [v2]=31 )
setValue arr1 v1 55
echoValue arr1 v2
我尝试了$ {$ 1 [$ 2]},$ {!1 [!2]}和所有其他可能的组合,但是这些都不起作用。如何在数组名称和索引均为动态而不是硬编码的情况下访问这些值?我将在这里为您提供任何建议。
答案 0 :(得分:1)
间接参数扩展需要数组名称和索引在一起。
echoValue () {
# $1 array name
# $2 array index
t="$1[$2]"
echo "${!t}"
}
答案 1 :(得分:0)
在Bash中,可以在函数外部声明的变量用作全局变量。这意味着您可以从bash函数内部调用/访问它们,而无需在函数内部将变量作为参数传递。
一个例子:
#!/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
答案 2 :(得分:0)
另一种解决方案
函数echovalue() { 本地str str =“ echo”'$'“ {$ 1”“ [$ 2]}” 评估$ str }