当范围由变量给定时,如何在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}
当范围由变量给定时,如何在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}
当前回答
如果您不想使用“seq”或“eval”或jot或算术扩展格式,例如for((i=1;i<=END;i++)),或其他循环,例如while,并且您不想只使用“printf”和“echo”,那么这个简单的解决方法可能适合您的预算:
a=1;b=5;d=‘对于{‘$a‘..‘$b‘}中的i;do echo-n“$i”;完成;'echo“$d”|bash
PS:反正我的bash没有“seq”命令。
在Mac OSX 10.6.8、Bash 3.2.48上测试
其他回答
如果你正在执行shell命令,并且你(像我一样)对流水线有着一种迷恋,那么这个命令很好:
seq 1$END | xargs-I{}echo}
您可以使用
for i in $(seq $END); do echo $i; done
另一层间接:
for i in $(eval echo {1..$END}); do
∶
将{}替换为(()):
tmpstart=0;
tmpend=4;
for (( i=$tmpstart; i<=$tmpend; i++ )) ; do
echo $i ;
done
产量:
0
1
2
3
4
如果您不想使用“seq”或“eval”或jot或算术扩展格式,例如for((i=1;i<=END;i++)),或其他循环,例如while,并且您不想只使用“printf”和“echo”,那么这个简单的解决方法可能适合您的预算:
a=1;b=5;d=‘对于{‘$a‘..‘$b‘}中的i;do echo-n“$i”;完成;'echo“$d”|bash
PS:反正我的bash没有“seq”命令。
在Mac OSX 10.6.8、Bash 3.2.48上测试