循环:for 与 while...超出基础知识。我的代码有细微的差别/优点/缺点吗?

循环:for 与 while...超出基础知识。我的代码有细微的差别/优点/缺点吗?

在过去的一年里,我一直在编写/完善相对复杂的代码,并一路学习 bash。我的代码充满了具有复杂的多级 while 循环的函数。我最近学习了更多关于 for 循环的知识,除了 C++ 的相似性和可以说更容易遵循的语法之外,我想知道使用其中一种与另一种相比是否有任何优点/缺点?

我主要考虑执行时间和与多级循环的兼容性。我的脚本中的函数(总共 5 个)可能会迭代 10,000-800,000 次,整个过程在一台强大的机器上需要 12-48 小时才能完成,所以如果可靠的话,我甚至会关心非常细微的时间差异。我还对 for/while 之间任何其他可能的差异感兴趣,由于它们的整体相似性,这些差异在典型的论坛/网站中不会被提及,但可能会以任何方式影响复杂的代码。例如,是否一个人在循环之前完成了所有进程(并释放内存),而另一个人则没有?或者,与循环内调用的 C++ 程序交互。

以下是我的两个函数代码结构的简化示例,以演示我使用 while 循环的多种方式:

一:

var1="1"; var1max=${length}
while IFG=read -r var1lineFULL; do
    var1line=`echo ${var1lineFULL} | cut -f 1`
    var2="1"; var2max=${length2}
    while [ ${var2} -le ${var2max} ]; do
        sedvar=`sed -n ${var2}p < file.txt`
        wait; <c++ executable command>
        <more commands (bash/c++), if statements, echoing, verbose options...>
        let var2=var2+1
     done
     let var1=var1+1
done < anotherfile.txt

二:

var1="1"
var3="1"; var3max=`cat thirdfile.txt | wc -l`
while [ ${var3} -le ${var3max} ]; do
     while IFS=read -r var3line; do
          wait; <fickle c++ executable command>
          <bash commands.. if, echo, awk, cut, etc.>
          let var3=var3+3
     done < thirdfile.txt
     let var1=var1+1
done

希望这有足够的意义来遵循。注意:这些循环有效。我让它们按照我需要增加整数的方式进行循环,这些整数确定循环运行的次数以及创建的输出的文件名的一部分。他们还创建了很多文本行,我将其“3&>”放入文本日志中。

所以你怎么看?当它不会改变增量放置时,是否有任何理由切换到“for”?有什么理由不这样做吗?会有时差吗?

答案1

如果您在循环之前知道需要重复多少次,例如迭代要处理的可数个静态文件,则应该使用 for 循环。这就是 for 循环擅长做的事情。如果您不确定,并且循环可能会根据处理过程中发生的情况而有所不同,例如某种将累加器填充到特定值的迭代聚合算法,或者当找到某个值时将退出循环的搜索算法它正在寻找的值,然后使用 while 循环。

在您的情况下,您应该使用 for 循环,因为您知道迭代次数并且仅将计数器增加固定值。

相关内容