Bash 4.0+才支持关联数组,必须用declare -A显式声明,遍历需用"${!array[@]}"取key、"${array[$key]}"取值,未声明或误用索引数组语法将导致静默错误。

Linux 中的 Bash 4.0+ 支持关联数组(associative array),可用于定义键值对,类似其他编程语言中的字典或哈希表。关键前提是:必须使用 declare -A 显式声明,否则普通数组无法按字符串键索引。
声明关联数组
关联数组不能直接用 array[key]=value 初始化,必须先声明类型:
-
declare -A user_info—— 创建空的关联数组 -
declare -A colors=(["red"]="#FF0000" ["blue"]="#0000FF")—— 声明并初始化多个键值对 - 不加
-A会创建索引数组,用字符串作下标将导致错误或静默转为数字下标(如 "abc" → 0)
添加和修改键值对
声明后可随时通过方括号语法赋值:
user_info["name"]="Alice"user_info["age"]=30user_info["city"]="Shanghai"- 重复赋值会覆盖原值:
user_info["age"]=31即更新 age
读取和遍历键值对
获取单个值用 ${array[key]};遍历需借助特殊扩展语法:
- 取值:
echo ${user_info["name"]}→ 输出 Alice - 取所有键:
echo ${!user_info[@]}→ 输出name age city(顺序不定) - 取所有值:
echo ${user_info[@]}→ 输出对应值,顺序与键一致 - 安全遍历示例:
for key in "${!user_info[@]}"; do<br> echo "$key: ${user_info[$key]}"<br> done
注意事项
关联数组是 Bash 特性,sh、dash 或旧版 Bash(:
- 检查版本:
bash --version,确保 ≥ 4.0 - 脚本开头建议加
#!/usr/bin/env bash,避免被 sh 解释器执行 - 键中不能含空白符或特殊字符(如空格、制表符、
=、]),否则需引号且可能引发解析问题 - 未定义的键取值返回空字符串,不会报错,可用
${user_info[key]:-default}提供默认值


















