【发布时间】:2019-03-07 04:17:29
【问题描述】:
我正在尝试遍历一个整数列表,如下所示:
start=000
for i in $(seq -w $start 48 006);
但是,当我尝试上面的代码时,循环似乎循环了一次然后退出。
我需要修改什么? (前导零需要保留)
【问题讨论】:
-
为什么要使用
seq?使用内置数学运算符,无需分叉外部进程
我正在尝试遍历一个整数列表,如下所示:
start=000
for i in $(seq -w $start 48 006);
但是,当我尝试上面的代码时,循环似乎循环了一次然后退出。
我需要修改什么? (前导零需要保留)
【问题讨论】:
seq?使用内置数学运算符,无需分叉外部进程
请您尝试关注一下。
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 sir 的评论,在此处添加 BASH 内置解决方案而不使用 seq。
for ((i=0; i<=48; i=i+6)); do printf '%03d\n' $i; done
【讨论】:
for ((i=0; i<=48; i=i+6)); do printf '%03d\n' $i; done
seq 的输入需要开始、递增和结束。
您已经用完成反转了增量:seq -w $start 48 006 表示从零开始,增量为 48 以在 6 处结束。简单的解决方法是 seq -w $start 6 48。注意:不需要 006,只需要 6,因为 seq 会将数字的宽度相等于两个位置。
【讨论】: