对于Bash中的循环,每次将步长值加倍
在关于bash循环的基本教程之后,我编写了以下脚本:对于Bash中的循环,每次将步长值加倍,bash,loops,for-loop,Bash,Loops,For Loop,在关于bash循环的基本教程之后,我编写了以下脚本: #!/bin/bash # since Bash v4 i=16 max=256 while [ $i -le $max ]; do echo $i let i=i*2 done 但是,既然我觉得这很可怕(我是一个纯粹的而仇恨者),有没有办法写出类似的东西: #!/bin/bash # since Bash v4 start = 16 max = 256 for i in {start..max..i*2}
#!/bin/bash
# since Bash v4
i=16
max=256
while [ $i -le $max ]; do
echo $i
let i=i*2
done
但是,既然我觉得这很可怕(我是一个纯粹的而仇恨者),有没有办法写出类似的东西:
#!/bin/bash
# since Bash v4
start = 16
max = 256
for i in {start..max..i*2}
do
echo $i
done
您可以为
循环使用:
for ((i = 16; i <= 256; i = i * 2)); do
echo "$i"
done
您可以为
循环使用:
for ((i = 16; i <= 256; i = i * 2)); do
echo "$i"
done
请考虑使用比TLDP更好的材料——特别是ABS,它被誉为BASH的W3SUBLE,充满了不良的实践实例和过时的内容。这是一个更好的参考;在.BTW中还有其他的{start..max..i*2}
与.BTW相冲突。顺便说一句,你的while
循环的条件可以更容易地表示为,而((我也,start=16
和max=256
都是有缺陷的——它们正在运行start
和max
作为命令(第一个参数为=
,第二个参数为数字)不执行作业。取出空格:<代码>开始= 16 ,和<代码> max=256 < /代码>。这是一个可以为你着想的东西,BTW。你不能做shell编程,讨厌<>代码> 。请学习使用它。请考虑使用比TLDP更好的材料。ABS,尤其是BASH的W3SUBE,充满了坏的名声。-练习示例和过时的内容。是这样一个更好的参考;在.BTW中还有其他的,{start..max..i*2}
与.BTW冲突,您的while
循环的条件可以更容易地表示为while((我还发现,start=16
和max=256
都有问题——它们都以命令的形式运行start
和max
(第一个参数是=
,第二个参数是数字),不执行作业。去掉空格:start=16
,和max=256
。顺便说一句,这对你来说很重要。你不能做shell编程,你不能在时讨厌。学着去爱它。也许除了例行引用$i
的扩展之外(为了处理像IFS
)中的数字这样的古怪情况,这正是我要写的。@CharlesDuffy:从你身上学到了很多!我刚刚做了你建议的更改。FWIW,我会写I*=2
(或者I+=I
,但这确实是个坏习惯。)也许,除了作为例行公事引用$i
的扩展(以及处理像IFS
中的数字这样的奇怪的角落),这正是我要写的。@CharlesDuffy:从你身上学到了很多!我刚刚做了你建议的更改。FWIW,我要写i*=2
。(或者i+=i
,但这确实是个坏习惯。)