将关联数组作为参数传递给函数以避免重复遍历大量关联数组的最佳方法是什么?这样,我就可以给函数提供我选择的任何数组来打印。这就是我所拥有的:
# Snippet
declare -A weapons=(
['Straight Sword']=75
['Tainted Dagger']=54
['Imperial Sword']=90
['Edged Shuriken']=25
)
print_weapons() {
for i in "${!weapons[@]}"; do
printf "%s\t%d\n" "$i" "${weapons[$i]}"
done
}
print_weapons发布于 2013-07-10 04:46:46
我不认为可以将关联数组作为参数传递给函数。不过,您可以使用以下技巧来解决此问题:
#!/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)" 输出
Imperial Sword ==> 90
Tainted Dagger ==> 54
Edged Shuriken ==> 25
Straight Sword ==> 75 发布于 2015-06-17 22:13:26
您可以使用local -n作为参考
declare -A weapons=(
['Straight Sword']=75
['Tainted Dagger']=54
['Imperial Sword']=90
['Edged Shuriken']=25
)
print_weapons() {
local -n array=$1
for i in "${!array[@]}"; do
printf "%s\t%d\n" "$i" "${array[$i]}"
done
}
print_weapons weapons发布于 2013-07-10 04:46:15
在常规数组中使用variable indirection已经够难看的了,使用关联数组也很困难--我找不到一种遍历键值的方法。
我想知道你需要的是declare -p吗
print_array() { declare -p $1; }
print_array weaponsdeclare -A weapons='(["Imperial Sword"]="90" ["Tainted Dagger"]="54" ["Edged Shuriken"]="25" ["Straight Sword"]="75" )'或者,更漂亮的:
print_array() { declare -p $1 | sed 's/[[)]/\n&/g'; }
print_array weaponsdeclare -A weapons='(
["Imperial Sword"]="90"
["Tainted Dagger"]="54"
["Edged Shuriken"]="25"
["Straight Sword"]="75"
)'https://stackoverflow.com/questions/17557434
复制相似问题