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
}
我需要对 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 }