Bash中一维数组用()定义,支持直接赋值、带索引赋值等;长度用${#arr[@]},元素用${arr[n]};遍历推荐"for item in "${arr[@]}"; do...",索引遍历用"${!arr[@]}";注意引号、下标从0开始、局部声明及#!/bin/bash声明。

在 Linux Shell(特别是 Bash)中定义和遍历一维数组很简单,但要注意语法细节——Bash 支持索引数组(默认),不支持关联数组的遍历方式用于普通一维场景。
定义一维数组
用括号 () 包裹元素,用空格分隔;支持多种写法:
-
直接赋值:
arr=(a b c) -
带索引赋值:
arr=([0]=x [2]=z [1]=y)(顺序可乱,缺失索引会自动跳过) -
逐个赋值:
arr[0]=one; arr[1]=two; arr[2]=three -
从命令输出构建:
arr=($(ls *.txt))(注意:含空格文件名时需谨慎,推荐用mapfile)
获取数组长度和元素
用特殊语法访问元信息:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 数组长度:
${#arr[@]}或${#arr[*]}(推荐前者,更准确) - 第 n 个元素(从 0 开始):
${arr[n]},如${arr[0]} - 所有元素:
${arr[@]}(保持各元素为独立词)或${arr[*]}(合并为单个字符串,用 IFS 首字符连接)
标准遍历方式(推荐 for 循环)
最安全、最常用的是基于 "${arr[@]}" 的双引号遍历,能正确处理含空格或特殊字符的元素:
for item in "${arr[@]}"; do
echo "元素:$item"
done
如果需要索引和值一起操作,用 !arr[@] 获取索引列表:
for i in "${!arr[@]}"; do
echo "索引 $i → ${arr[i]}"
done
注意事项
避免常见陷阱:
- 不要写成
for item in $arr(没引号、没[@]),这只会取第一个元素且会单词拆分 - Bash 数组下标从 0 开始,
${arr[-1]}可取最后一个元素(4.3+ 支持) - 数组不是“全局变量”,函数内定义需加
local -a arr显式声明局部数组 - 脚本开头建议加上
#!/bin/bash,确保使用 Bash 而非 sh,因为 sh 不支持数组

















