通过更改最后两个参数的位置来检查bash
for
循环。
下面的代码打印:
$ for ((i=1;i<2;i++)); do echo $i; done
1
但是下面的代码打印出我能看到的所有自然数字:
$ for ((i=1;i++;i<2)); do echo $i; done
1
2
3
4
5
6
.
.
.
这是什么原因?
答案 0 :(得分:0)
这是man bash
:
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
First, the arithmetic expression expr1 is evaluated according to
the rules described below under ARITHMETIC EVALUATION. The
arithmetic expression expr2 is then evaluated repeatedly until
it evaluates to zero. Each time expr2 evaluates to a non-zero
value, list is executed and the arithmetic expression expr3 is
evaluated. If any expression is omitted, it behaves as if it
evaluates to 1. The return value is the exit status of the last
command in list that is executed, or false if any of the expres‐
sions is invalid.
特别注意:
在您的情况下,每次expr2计算为非零值时,执行list并计算算术表达式expr3。
expr2
,i++
在2^64 = 18446744073709551616
次迭代后整数回绕之前不会计算为0。
expr3
,i<2
将在第一次迭代后评估为0,但正如您从描述中看到的,这对任何事情都没有影响。