Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于Bash中的循环,每次将步长值加倍_Bash_Loops_For Loop - Fatal编程技术网

对于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}

在关于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}
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
,但这确实是个坏习惯。)