Bash关联数组需先用declare -A声明再赋值,支持字符串键实现键值对映射,适用于配置映射、服务名查端口等场景,要求Bash 4.0+且键含特殊字符时须加引号。

在 Linux Shell(Bash)中定义关联数组存键值对,核心是两步:先声明为关联类型,再用键名赋值。普通数组用数字下标,而关联数组支持字符串键,更贴近“字典”或“哈希表”的用法。
必须先声明,否则会报错
关联数组从 Bash 4.0 开始支持,使用前必须显式声明,否则赋值会被当作普通数组处理(键会被当成字符串索引但不生效):
-
正确写法:
declare -A mydict或declare -A mydict=() -
错误写法:
mydict=()(未声明,后续字符串键将失效) - 声明后变量名就固定为关联数组类型,不可再混用数字下标赋值(否则行为未定义)
用键名直接赋值添加键值对
声明之后,可随时用 数组名["键"]=值 的方式插入数据,键可以是任意字符串(含空格、特殊字符,但需加引号):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
mydict["name"]="Alice"mydict["age"]="30"mydict["city"]="Shanghai"- 键支持变量展开:
key="status"; mydict["$key"]="online"
访问和遍历键值对
取值、取所有键、取所有值都有固定语法:
- 取单个值:
echo ${mydict["name"]}→ 输出Alice - 取全部键:
echo ${!mydict[@]}→ 输出类似name age city status - 取全部值:
echo ${mydict[@]}→ 输出类似Alice 30 Shanghai online - 安全遍历(推荐):
for key in "${!mydict[@]}"; do<br> echo "$key → ${mydict[$key]}";<br>done
注意几个常见坑
实际写脚本时容易忽略的细节:
- Bash 版本必须 ≥ 4.0(用
bash --version确认),旧系统如 CentOS 6 默认 bash 3.2 不支持 - 键中的空格、括号、点等字符必须加双引号,否则解析出错:
mydict["user id"]="123"❌,应写为mydict["user id"]="123"✅ - 不能用
${mydict[*]}替代${mydict[@]}遍历值——前者会把所有值拼成一个字符串,丢失边界 - 删除某个键值对用
unset mydict["key"],清空整个数组用unset mydict

















