如何将关联数组作为参数传递给函数?这在巴什有可能吗?
以下代码未按预期工作:
function iterateArray
{
local ADATA="${@}" # associative array
for key in "${!ADATA[@]}"
do
echo "key - ${key}"
echo "value: ${ADATA[$key]}"
done
}
Run Code Online (Sandbox Code Playgroud)
将关联数组传递给像普通数组这样的函数不起作用:
iterateArray "$A_DATA"
Run Code Online (Sandbox Code Playgroud)
要么
iterateArray "$A_DATA[@]"
Run Code Online (Sandbox Code Playgroud) 我在StackOverflow上找到了一个很棒的答案,它解释了如何将关联数组传递给函数.有人能够帮我弄清楚${1#*=}下面代码中的语法是什么?(从借来的答案被jaypal辛格):
#!/bin/bash
declare -A weapons=(
['Straight Sword']=75
['Tainted Dagger']=54
['Imperial Sword']=90
['Edged Shuriken']=25
)
function print_array {
eval "declare -A arg_array="${1#*=}
for i in "${!arg_array[@]}"; do
printf "%s\t%s\n" "$i ==> ${arg_array[$i]}"
done
}
print_array "$(declare -p weapons)"
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的猜测(纠正我,如果我错了任何这些):
- 1意味着传递给函数($1或${1})的第一个参数
- #意味着索引$1,因为$1是一个关联数组,使得#键$1
- *表示#关联数组中键的值$1
离开了=.这意味着什么?这是一种表明你想要的方式,#并且*是指关联数组的键和值吗?