bash - 为什么 `for i in {1..10}` 与 `for ((i=1; i<=10; i++))` 不同?

标签 bash for-loop

我通过 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,变量被初始化,并且在每次迭代中,它的值被改变并且条件被检查。没有值列表,只有结束循环的条件。

关于bash - 为什么 `for i in {1..10}` 与 `for ((i=1; i<=10; i++))` 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67082265/

相关文章:

linux - 如果原始图像已被删除,如何查找并删除调整大小的 WordPress 图像?

MySql - 将数组值(匹配和不匹配)插入数据库匹配列

c# - for循环中的整数溢出导致奇怪的行为

function - 评估 R 循环中的变量

linux - 如何在循环 mkdir 文件夹中创建 txt 文件?

linux - 如何将 .profile 导入 ipython 的 bash shell?

linux - 从文本文件的每一行分配新变量

python - 使用多个 'for' 循环解码嵌套的 JSON

java - 将 List<int[]> .get() 函数与数组进行比较的 boolean 表达式出现问题

mysql - bash 子命令中密码的安全性