Linux Shell 中循环嵌套是实现矩阵式遍历最直接方式,常用于二维结构处理;可用双层 for 模拟坐标(i,j),或 while read 套 for/awk 处理文本行列数据。

Linux Shell 中的循环嵌套(比如 for 套 for)是实现矩阵式遍历最直接的方式,常用于处理二维结构:如多行多列数据、二维数组索引、文件目录组合、坐标点生成等。
用双层 for 循环模拟矩阵坐标遍历
Shell 本身不原生支持二维数组(bash 4.3+ 虽有 declare -A 关联数组,但“矩阵”更常用索引逻辑模拟),所以常用两个变量分别代表行号和列号,构造出 (i, j) 坐标对:
- 外层循环控制行(i),内层循环控制列(j)
- 每轮内层循环执行一次“矩阵单元格”的操作,比如打印、计算、调用命令
- 示例:打印 3 行 × 4 列的坐标矩阵
for i in {0..2}; do
for j in {0..3}; do
echo "[$i,$j]"
done
done遍历二维数据:按行读取 + 字段分割
真实场景中,“矩阵”常来自文本文件(如 CSV 或空格分隔),这时需结合 while read 和内层 for 或 awk 分割字段:
- 外层用
while IFS= read -r line逐行读取(模拟“行”维度) - 内层用
for word in $line或echo "$line" | awk '{...}'处理每行内的“列” - 注意:避免使用
for line in $(cat file),会破坏含空格的字段
while IFS= read -r line; do
if [ -n "$line" ]; then
for field in $line; do # 按空白符自动分词
echo "Cell: $field"
done
fi
done 用数组索引模拟矩阵访问(bash 4.0+)
若已将数据存入一维数组(如 arr=(a b c d e f)),可通过行列公式 index = i * cols + j 映射为逻辑矩阵:
- 设总列数
cols=3,则第i行第j列对应${arr[$((i*cols+j))]} - 需确保
i*cols+j不越界() - 适合预加载数据后做批量计算或格式化输出
arr=(1 2 3 4 5 6 7 8 9) rows=3; cols=3 for ((i=0; i<rows i do for j idx="$((i" cols printf done echo></rows>
嵌套中灵活控制:break、continue 与标签
多层循环里,break 默认只退出当前层;如需跳出外层,可用带标签的 break(bash 4.3+):
- 用
outer_loop:定义标签,break outer_loop直接终止外层 -
continue同理,可跳过当前外层迭代 - 常见于查找匹配项后立即退出全部循环
outer_loop:
for i in {1..3}; do
for j in {1..3}; do
if [ "$i" = 2 ] && [ "$j" = 2 ]; then
echo "Found at (2,2), exiting all loops"
break outer_loop
fi
echo "($i,$j)"
done
done











