Linux中按数字序列加步长最常用seq命令和C风格for循环:seq语法清晰兼容性好,C风格更高效无需外部命令;brace expansion仅限Bash 4.0+且不支持变量。

Linux中用for循环按数字序列加步长,最常用的是seq命令或C风格for语法,两者都支持自定义起始值、结束值和步长。
用 seq 命令生成带步长的数字序列
seq 是专门生成数字序列的工具,语法清晰,兼容性好(所有主流 shell 都支持):
-
for i in $(seq 1 2 10); do echo $i; done→ 输出 1, 3, 5, 7, 9(从 1 开始,步长为 2,不超过 10) -
for i in $(seq 0 5 25); do printf "%d\n" $i; done→ 输出 0, 5, 10, 15, 20, 25 - 注意:括号外需用
$()命令替换,且建议对seq结果加双引号防止空格/换行异常(但for遍历默认按空白分割,通常可不加)
用 C 风格 for 循环(Bash/Zsh 原生支持)
更高效、无需外部命令,适合脚本中频繁使用:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
for ((i=1; i → 同样输出 1, 3, 5, 7, 9- 语法结构:
for ((初始化; 条件; 更新)),其中更新部分写i+=步长即可 - 支持负步长,如
for ((i=10; i>=0; i-=3)); do echo $i; done→ 输出 10, 7, 4, 1
用 brace expansion(仅限固定步长,且 Bash 4.0+)
简洁但限制多:只支持整数步长,且必须是正数,不能动态计算:
-
for i in {0..20..5}; do echo $i; done→ 输出 0, 5, 10, 15, 20 - 注意:花括号展开在 shell 解析早期完成,不支持变量(如
{1..$n..2}会报错),需用eval或改用seq/for(( ))
实用建议与避坑点
日常推荐优先用 C 风格循环(效率高、逻辑清晰),兼容旧系统或需要复杂格式化时选seq:
- 避免在循环体中修改循环变量(如
i),否则可能跳过或死循环 - 步长为 0 会导致无限循环(C 风格中要确保条件终将为假)
- 处理大范围数字时,
seq可能生成大量字符串占用内存,C 风格更轻量 - 若需浮点步长(如 0.1),
seq支持(seq 0.1 0.1 1.0),但 shell 数值运算不直接支持浮点,需借助bc或awk

















