亲爱的,我需要一些东西来帮助我。我正在尝试使用名为“array”的辅助变量通过函数修改全局数组。我想使用一个带有变量“config”名称的字符串的函数来修改全局数组“config”。
我正在尝试以下但我没有得到结果。
declare -A config
function testABC {
array=${1}[@]
array["key"]="value1"
array["key2"]="value2"
}
testABC "config"
echo ${config["key"]}
echo ${config["key2"]}
#desired output:
#value1
#value2
我的bash版本是4.2.45
问候。
答案 0 :(得分:2)
使用printf -v
设置值。这样可以避免eval
的使用不安全,因为printf
只能 将文本打印到命名变量中,仅此而已。
testABC () {
printf -v "$1[key]" '%s' value1
printf -v "$1[key2]" '%s' value2
}
请务必阅读http://mywiki.wooledge.org/BashFAQ/006(从中获取此答案),以便充分了解各种方法的缺点。 Shell语言不适合这种类型的编程。
答案 1 :(得分:1)
你几乎做对了,这样的事情应该有效:
function testABC {
array="$1"
# Don't proceed unless the argument is a valid identifier
valid_id="^[[:alpha:]_][[:word:]]+$"
[[ $array =~ $valid_id ]] || return
eval "$array"["key"]="value1"
eval "$array"["key2"]="value2"
}
我们将传递给函数的参数存储在数组变量中。之后,我们构造了为键分配值并使用eval
的行。 eval
用$array
替换"config"
并执行整行,正确分配值。