You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中使用间接扩展访问关联数组时如何获取对应键名?

Bash关联数组间接扩展获取键名的实现方法

Bash 原生支持该需求,只需要调整间接扩展的表达式构造规则即可,获取关联数组键的原生语法为${!数组名[@]},对应到动态前缀的场景适配即可。

方案1:兼容Bash 4.0+的传统间接扩展写法

#! /usr/bin/bash
declare -A fruit_colour
fruit_colour["apple"]="red"
fruit_colour["banana"]="yellow"
fruit_colour["durian"]="green"

declare -A thing_colour
thing_colour["keyboard"]="black"
thing_colour["shirt"]="red"
thing_colour["desk"]="white"

target="thing"    # 可替换为 "fruit"

# 构造键的间接扩展表达式
key_expr="!${target}_colour[@]"
# 构造数组名前缀,用于后续取单值
arr_name="${target}_colour"

# 遍历所有键
for key in ${!key_expr}; do
    # 间接获取当前键对应的值
    value="${!arr_name[$key]}"
    echo "键: $key, 值: $value"
done

运行输出如下:

键: desk, 值: white
键: shirt, 值: red
键: keyboard, 值: black

方案2:Bash 4.3+ 更简洁的名称引用(nameref)写法

如果运行环境Bash版本高于等于4.3,可以用名称引用语法简化代码,可读性更高:

#! /usr/bin/bash
declare -A fruit_colour
fruit_colour["apple"]="red"
fruit_colour["banana"]="yellow"
fruit_colour["durian"]="green"

declare -A thing_colour
thing_colour["keyboard"]="black"
thing_colour["shirt"]="red"
thing_colour["desk"]="white"

target="thing"
# 给目标关联数组起别名
declare -n curr_arr="${target}_colour"

# 直接按普通关联数组的语法操作即可
for key in "${!curr_arr[@]}"; do
    echo "键: $key, 值: ${curr_arr[$key]}"
done

注意事项

  • 如果数组值包含空格、特殊字符,所有变量建议包裹双引号,避免分词异常
  • 关联数组本身为Bash 4.0版本新增特性,运行环境需要满足版本要求

内容的提问来源于stack exchange,提问作者YYX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:36:03