bash - 如何在一个循环中只运行一个步骤?
问题描述
我已经制作了以下 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 变量执行第三个循环的完整循环。我应该改变什么?
解决方案
您应该指定循环的上限和下限。目前,您将 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
像这个建议那样编码有什么意义吗?