为什么 for 循环不需要显式指定循环变量的值集?

Tim*_*Tim 2 bash

我从https://unix.stackexchange.com/a/175845/674读取命令

为什么可以

$ bash -c 'for f do echo "$f";done' bash a b c
a
b
c
Run Code Online (Sandbox Code Playgroud)

输出与

$ bash -c 'for f in "$@"; do echo "$f";done' bash a b c
a
b
c
Run Code Online (Sandbox Code Playgroud)

?

为什么 for 循环不需要明确指定

  • 循环变量的值集,如in "$@"

  • ; ?

谢谢。

Pes*_*hke 7

bash 手册页

对于名称 [ [ 在 [ 字 ... ] ] ; ] 做清单;完毕

in 后面的单词列表被扩展,生成一个项目列表。变量名依次设置给这个列表的每个元素,并且每次都执行列表。如果省略 in 字,则 for 命令对设置的每个位置参数执行一次 list(参见下面的参数)。...

然后从参数部分:

位置参数是由一位或多位数字表示的参数,而不是单个数字 0。位置参数是在调用时从 shell 的参数分配的,并且可以使用 set 内置命令重新分配。...

总之,in关键字和后面的分号是可选的。如果省略in关键字,则for循环的参数取自传递给 shell 的参数。因此,您提供的两个代码示例是等效的。