为什么`foriin{1..10}`与`for((i=1;i<=10;i++))`不同?
我通过bash脚本编写了一个简单的代码,
代码 1
for((i=1;i<=10;i++))
do
echo $i
i=$((i+1))
echo $i
i=$((i+2))
done
代码 1 的输出
1
2
5
6
9
10
代码 2
for i in {1..10}
do
echo $i
i=$((i+1))
echo $i
i=$((i+2))
done
代码 2 的输出
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
我只是想知道,为什么输出不一样?
提前谢谢
回答
使用in,变量遍历列表。您可以在循环中更改它的值,但是当下一次迭代开始时,下一个值将分配给它,而不管您分配给它的值是什么。(而且我无法想象任何其他行为:shell 是否应该尝试猜测您想在列表中跳转多远?如果该值重复或根本不存在于列表中怎么办?)
在 C 风格中for,变量被初始化,在每次迭代时,它的值都会改变并检查条件。没有值列表,只有结束循环的条件。
回答
它们不是彼此的简写:它们是完全不同的代码,并且预期以不同的方式运行。
{1..10}只是简写1 2 3 4 5 6 7 8 9 10;当您运行for i in 1 2 3 4 5 6 7 8 9 10,你明确地分配这些精确值,以i反过来,覆盖任何其他以前那里。
相比之下,for ((i=1; i<=10; i++))它提供了三个独立的语句: 一个初始化器( i=1),告诉它如何启动循环;一检查(i<=10)来告诉它如何确定循环是否完成; 和一个更新( i++),告诉它在循环迭代之间做什么。这些是完全任意的命令,您可以在这些位置放置您想要的任何算术表达式。
THE END
二维码