使用Seq和Variable迭代列表

问题描述 投票:0回答:2

我试图循环遍历一个整数列表,如下所示:

start=000
for i in $(seq -w $start 48 006);

但是,当我尝试上面的代码时,循环似乎循环一次然后退出。

我需要修改什么? (领先的零需要留下)

bash shell syntax seq
2个回答
2
投票

你可以尝试一下吗?

start=0
diff=6
for i in $(seq $start $diff 48);
do
  printf '%03d\n' $i
done

输出如下。

000
006
012
018
024
030
036
042
048

OP尝试过的代码中的问题:我相信你在seq中给出了错误的语法,它应该是startpoint然后increment_number然后endpoint例如 - >(seq(start_point increment end_point))。因为你错误地给它们,所以它只在循环中打印一次。

在你的尝试中它将起始点设为0并且应该运行到6,差值为48这是不可能的,因此它只打印非常合适的第一个整数值。



编辑:根据@Cyrus先生的评论,在这里添加BASH内置解决方案,而不使用seq

for ((i=0; i<=48; i=i+6)); do printf '%03d\n' $i; done

1
投票

seq的输入需要一个开始,增量和完成。

你用完成来反转增量:seq -w $start 48 006意味着从零开始,增加48到6完成。简单的修复是seq -w $start 6 48。注意:不需要006,因为seq会将数字的宽度均衡到两个位置。

© www.soinside.com 2019 - 2024. All rights reserved.