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

如何在Bash中通过变量访问关联数组元素

Bash脚本通过参数指定关联数组和键取值的实现方法

你原来尝试的${$1[$2]}写法在Bash中不生效,因为Bash不支持直接嵌套解析变量名。可以通过以下两种方式实现需求:

方法一:使用名称引用(Bash 4.3+ 推荐)

利用Bash的declare -n特性创建数组的名称引用,直接通过引用操作目标数组:

#!/bin/bash

declare -A first
declare -A second

first=([ele]=value [elem]=valuee [element]=valueee)
second=([ele]=foo [elem]=fooo [element]=foooo)

# 检查参数数量是否正确
if [ $# -ne 2 ]; then
    echo "用法: $0 <数组名> <元素键>"
    exit 1
fi

# 创建目标数组的名称引用
declare -n target_arr="$1"

# 可选:检查数组是否存在
if ! declare -p "$1" &>/dev/null; then
    echo "错误:数组 '$1' 不存在"
    exit 1
fi

# 可选:检查键是否存在于数组中
if [[ ! -v target_arr[$2] ]]; then
    echo "错误:数组 '$1' 中不存在键 '$2'"
    exit 1
fi

# 输出对应值
echo "${target_arr[$2]}"

执行示例:

sh.sh second elem

输出:fooo

方法二:使用间接引用(兼容旧版本Bash)

通过构造间接引用的变量名格式,利用Bash的间接扩展特性取值:

#!/bin/bash

declare -A first
declare -A second

first=([ele]=value [elem]=valuee [element]=valueee)
second=([ele]=foo [elem]=fooo [element]=foooo)

if [ $# -ne 2 ]; then
    echo "用法: $0 <数组名> <元素键>"
    exit 1
fi

# 构造间接引用的字符串(格式:数组名[键])
ref_str="$1[$2]"

# 利用!符号完成间接引用取值
echo "${!ref_str}"

同样执行sh.sh second elem会输出fooo。

注意事项

  • 必须保证传入的第一个参数是已声明的关联数组名称,否则会报错或输出空值;
  • 可选的参数检查逻辑可以提升脚本的健壮性,避免非法输入导致的异常;
  • 名称引用(declare -n)是Bash 4.3及以上版本才支持的特性,若需要兼容更老的Bash版本,优先选择间接引用方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:24:30