首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将关联数组作为参数传递给Bash

将关联数组作为参数传递给Bash
EN

Stack Overflow用户
提问于 2013-07-10 04:20:25
回答 4查看 6.2K关注 0票数 3

将关联数组作为参数传递给函数以避免重复遍历大量关联数组的最佳方法是什么?这样,我就可以给函数提供我选择的任何数组来打印。这就是我所拥有的:

代码语言:javascript
复制
# 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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-10 04:46:46

我不认为可以将关联数组作为参数传递给函数。不过,您可以使用以下技巧来解决此问题:

代码语言:javascript
复制
#!/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)" 

输出

代码语言:javascript
复制
Imperial Sword ==> 90   
Tainted Dagger ==> 54   
Edged Shuriken ==> 25   
Straight Sword ==> 75   
票数 8
EN

Stack Overflow用户

发布于 2015-06-17 22:13:26

您可以使用local -n作为参考

代码语言:javascript
复制
 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
票数 18
EN

Stack Overflow用户

发布于 2013-07-10 04:46:15

在常规数组中使用variable indirection已经够难看的了,使用关联数组也很困难--我找不到一种遍历键值的方法。

我想知道你需要的是declare -p

代码语言:javascript
复制
print_array() { declare -p $1; }
print_array weapons
代码语言:javascript
复制
declare -A weapons='(["Imperial Sword"]="90" ["Tainted Dagger"]="54" ["Edged Shuriken"]="25" ["Straight Sword"]="75" )'

或者,更漂亮的:

代码语言:javascript
复制
print_array() { declare -p $1 | sed 's/[[)]/\n&/g'; }
print_array weapons
代码语言:javascript
复制
declare -A weapons='(
["Imperial Sword"]="90" 
["Tainted Dagger"]="54" 
["Edged Shuriken"]="25" 
["Straight Sword"]="75" 
)'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17557434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档