【问题标题】:Iterate Through List with Seq and Variable使用 Seq 和变量遍历列表
【发布时间】:2019-03-07 04:17:29
【问题描述】:

我正在尝试遍历一个整数列表,如下所示:

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

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

我需要修改什么? (前导零需要保留)

【问题讨论】:

  • 为什么要使用seq?使用内置数学运算符,无需分叉外部进程

标签: bash shell syntax seq


【解决方案1】:

请您尝试关注一下。

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

【讨论】:

  • @hallettwx:使用 bash 内置命令:for ((i=0; i&lt;=48; i=i+6)); do printf '%03d\n' $i; done
【解决方案2】:

seq 的输入需要开始、递增和结束。

您已经用完成反转了增量:seq -w $start 48 006 表示从零开始,增量为 48 以在 6 处结束。简单的解决方法是 seq -w $start 6 48。注意:不需要 006,只需要 6,因为 seq 会将数字的宽度相等于两个位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多