【问题标题】:for loop with multiple conditions in Bash scripting在 Bash 脚本中具有多个条件的 for 循环
【发布时间】:2023-04-06 14:20:01
【问题描述】:

自从我编写密集的 bash 脚本以来已经有一段时间了,我忘记了在 for 循环中执行多个条件的语法。

在 C 语言中,我会这样做:

for(var i=0,j=0; i<arrayOne.length && j<arrayTwo.length; i++,j++){
  // Do stuff
}

我在谷歌上搜索了一段时间,只发现涉及嵌套 for 循环的语法,而不是一个 for 循环的多个条件。

【问题讨论】:

    标签: bash for-loop


    【解决方案1】:

    听起来你在谈论 for 循环的算术运算。

    for ((i = j = 0; i < ${#arrayOne[@]} && j < ${#arrayTwo[@]}; i++, j++)); do
        # Do stuff
    done
    

    假设i 和j 未设置或为零,则大致相当于:

    while ((i++ < ${#arrayOne[@]} && j++ < ${#arrayTwo[@]})); do ...
    

    只要你不关心循环后i/j 的值,就更便携了。

    【讨论】:

      【解决方案2】:

      如果和C比较,差别不大

      for (( c=1,d=1; c<=5 && d<=6; c++,d+=2 ))
      do
              echo "$c : $d"
      done
      

      【讨论】:

      • 嗯,这是 C 风格的语法,我还没有尝试过。我对 for i in $things 之类的东西更感兴趣;做..完成
      • 如果你只有一个循环,你可以这样做:x[0]="test 1"; x[1]="test 2"; for i in "${x[@]}"; do echo $i; done
      • for in 迭代参数。它与“条件”没有任何关系,并且不能在没有嵌套的情况下执行与 c 样式循环等效的操作。 for i in "${arrayOne[@]}" "${arrayTwo[@]}"; do 将依次迭代每个数组的元素。
      • 最后一部分是我正在寻找的确切语法,但很高兴知道 c 样式语法。感谢@ormaaj 的解释。我会将您标记为该评论的答案。
      猜你喜欢
      • 2020-08-21
      • 2020-04-10
      • 2013-03-10
      • 2012-08-04
      • 2021-12-24
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      相关资源
      最近更新 更多