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

如何在Bash中仅通过循环遍历命令输出并打印索引与值?

遍历命令输出时同时获取索引和值的实现方法

你已经了解过数组遍历索引和值的写法,但现在需要遍历命令输出,且不想在循环外定义数组或计数器变量,想要类似for index,value in $(seq 1 10)的简洁写法。以下是几种可行的实现方式:

方法1:结合nl与while read

利用nl命令给命令输出添加行号,再通过while read同时读取索引和值:

# 索引从0开始
while read -r index value; do
    echo "$index $value"
done < <(seq 1 10 | nl -v 0)

# 若需要索引从1开始,去掉`-v 0`即可
while read -r index value; do
    echo "$index $value"
done < <(seq 1 10 | nl)

nl -v 0指定行号起始值为0,默认是1;< <(command)是Bash的进程替换,将命令输出作为read的输入。

方法2:用awk直接处理

如果不需要在循环内做复杂逻辑,awk可以一步完成索引添加与输出:

# 索引从0开始
seq 1 10 | awk '{print NR-1, $0}'

# 索引从1开始
seq 1 10 | awk '{print NR, $0}'

NR是awk内置的记录号(每行递增1),通过NR-1转换为从0开始的索引。

方法3:循环内初始化计数器(简化写法)

如果偏好for循环形式,可以在循环内通过默认值初始化计数器,无需提前在循环外声明:

for value in $(seq 1 10); do
    (( index = ${index:-0} ))
    echo "$index $value"
    (( index++ ))
done

${index:-0}表示如果index未定义则取0,第一次循环后index会被保留并自增。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:15:27