为什么`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++),告诉它在循环迭代之间做什么。这些是完全任意的命令,您可以在这些位置放置您想要的任何算术表达式。


以上是为什么`foriin{1..10}`与`for((i=1;i&lt;=10;i++))`不同?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>