首页 > 解决方案 > 如何在一个循环中只运行一个步骤?

问题描述

我已经制作了以下 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 变量执行第三个循环的完整循环。我应该改变什么?

标签: bashshellloops

解决方案


您应该指定循环的上限和下限。目前,您将 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

像这个建议那样编码有什么意义吗?


推荐阅读