Bash中如何解析哈希表键关联的数组并遍历输出?
在Bash中以数组名作为关联数组键,解析并遍历对应数组
我并非Bash/Shell脚本专家,需求是:使用数组变量名作为哈希表(关联数组)的键,遍历哈希表的键时,将其解析为实际数组,再遍历该数组并输出对应值。
原代码
arr1=(A B) arr2=(C D) declare -A arrmap arrmap=( [arr1]="array 1" [arr2]="array 2" ) for k in "${!arrmap[@]}"; do for f in "${k[@]}"; do echo "$k: $f"; done done
原代码输出
arr2: arr2 arr1: arr1
期望输出
A: array 1 B: array 1 C: array 2 D: array 2
问题原因
原代码中"${k[@]}"并未将k存储的数组名解析为实际数组,而是把字符串k当作数组名处理,因此只能输出字符串本身。
解决方法
for k in "${!arrmap[@]}"; do eval a=\( \${${k}[@]} \) for f in "${a[@]}"; do echo "$f: ${arrmap[$k]}"; done done
说明
- 用
eval将数组名k解析为实际数组的元素集合,赋值给临时数组a - 遍历临时数组
a即可获取原数组的元素,再结合关联数组arrmap中对应键的值,输出符合预期的结果
内容的提问来源于stack exchange,提问作者mike01010
相关产品推荐
相关产品推荐

