在巴什中,
类似 C 的 for 循环的语法是:
for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
的执行是否会
commands
影响三个算术表达式expr1
、expr2
和/或 的计算expr3
,从而改变迭代次数(例如迭代次数)?或者迭代(例如迭代次数)是否不受
commands
每次迭代中执行的影响?for 命令的其他语法是:
for name [ [in [words ...] ] ; ] do commands; done
每次迭代中执行 是否会
commands
影响迭代次数(例如迭代次数)?
答案1
当然:
$ bash -c 'for ((i=0;i<10;i++)); do echo $i; ((i++)); done'
0
2
4
6
8
在for ((expr1; expr2; expr3)
形式中,expr2
(和expr3
,如果expr2
没有失败)每次运行循环时都会进行评估。对于另一种形式,bash 在words
展开后启动循环(包括执行命令替换、通配符等)。因此name
,一旦循环开始,您就无法影响迭代变量 ( ) 的可能值。当然,您可以:
$ bash -c 'for i; do echo $i; break; done' _ a b c
a