我在StackOverflow上找到了一篇很棒的答案,它解释了如何将关联数组传递给一个函数。有人能帮我弄清楚下面代码中${1#*=}
的语法是什么吗?(摘自那个答案,作者为jaypal singh):
#!/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)"
以下是我的猜测(如果我对其中任何一项有误,请纠正):
-
1
表示传递给函数的第一个参数($1
或 ${1}
)-
#
表示 $1
的索引,由于 $1
是一个关联数组,所以 #
是 $1
的键-
*
表示关联数组 $1
中与 #
键对应的值
那么剩下的 =
是什么意思?那是不是表示您希望 #
和 *
分别指代关联数组的键和值呢?