当范围由变量给定时,如何在Bash中迭代一系列数字?

我知道我可以做到这一点(在Bash文档中称为“序列表达式”):

 for i in {1..5}; do echo $i; done

这给出了:

1.2.3.4.5.

然而,如何用变量替换任意一个范围端点?这不起作用:

END=5
for i in {1..$END}; do echo $i; done

哪些打印:

{1..5}


当前回答

如果你需要前缀,你可能会喜欢这个

 for ((i=7;i<=12;i++)); do echo `printf "%2.0d\n" $i |sed "s/ /0/"`;done

这将产生

07
08
09
10
11
12

其他回答

您可以使用

for i in $(seq $END); do echo $i; done

这是另一种方式:

end=5
for i in $(bash -c "echo {1..${end}}"); do echo $i; done

如果你需要前缀,你可能会喜欢这个

 for ((i=7;i<=12;i++)); do echo `printf "%2.0d\n" $i |sed "s/ /0/"`;done

这将产生

07
08
09
10
11
12

如果你正在执行shell命令,并且你(像我一样)对流水线有着一种迷恋,那么这个命令很好:

seq 1$END | xargs-I{}echo}

如果您使用BSD/OSX,您可以使用jot而不是seq:

for i in $(jot $END); do echo $i; done