【问题标题】:How to run only one step in a loop?如何在一个循环中只运行一个步骤?
【发布时间】:2019-03-17 13:15:55
【问题描述】:

我已经制作了以下 shell 代码:

declare -i x=3;
declare -i y=8;
declare -i z=6;

for r1 in 0.80 0.90
do
  for r2 in 0.80 0.90
  do
    for (( i=0; i <= 48; i++))
    do
      origin=$((x + z*i))
      end=$((y + z*i))
      rm -r ${name}_${r1}_${r2}.gnu

      echo "beginrow=$origin" > ${name}_${r1}_${r2}.gnu
      echo "endrow=$end"  >> ${name}_${r1}_${r2}.gnu
      echo "r1=$r1" >> ${name}_${r1}_${r2}.gnu
      echo "r2=$r2" >> ${name}_${r1}_${r2}.gnu
    done
  done
done

我希望它只为每对 r1 和 r2 变量执行第三个循环的一个步骤。相反,当我运行代码时,它会为每对 r1 和 r2 变量执行第三个循环的完整循环。我应该改变什么?

【问题讨论】:

  • 你想让 0 到 48 之间的 i 循环运行一次吗?您可以删除循环并说i=20(范围内的随机值)吗?或者将i &lt;= 48 替换为i &lt; ${loopcount} 并以loopcount=1 开头?
  • 您好,理想情况下我想要以下输出:r1=0.80 r2=0.80 origin=3 end=8|||||| r1=0.80 r2=0.90 origin=9 end=14 以此类推。然而,我目前遇到的问题是,对于每个 r1 和 r2 集合,第三个循环打印所有可能的“起点”和“终点”值。
  • 你在哪里将内容分配给变量name
  • 缩进你的代码。
  • 实际代码比这个长得多,但问题与代码的显示部分有关(变量 {name} 在第一行中分配,但这并不重要) .

标签: bash shell loops


【解决方案1】:

您应该指定循环的上限和下限。目前, 您正在将 i 从 0 迭代到 48:

for (( i=0; i <= 48; i++))

你说:“我希望它对每对 r1 和 r2 变量只执行第三个循环的一个步骤。”。您要完成哪个步骤?看来你根本不需要第三个循环:

declare -i x=3;
declare -i y=8;
declare -i z=6;

for r1 in 0.80 0.90
do
  for r2 in 0.80 0.90
  do
    # for (( i=0; i <= 48; i++))
    # do
      i = 48
      origin=$((x + z*i))
      end=$((y + z*i))
      rm -r ${name}_${r1}_${r2}.gnu

      echo "beginrow=$origin" > ${name}_${r1}_${r2}.gnu
      echo "endrow=$end"  >> ${name}_${r1}_${r2}.gnu
      echo "r1=$r1" >> ${name}_${r1}_${r2}.gnu
      echo "r2=$r2" >> ${name}_${r1}_${r2}.gnu
    # done
  done
done

按照这个建议编码有什么意义吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2014-12-29
    • 1970-01-01
    相关资源
    最近更新 更多