我偶然发现了这个奇怪的问题,但不太明白为什么它能够运行:
$ for ((i=0;i<8;i++)) {
> printf '%d...' "$i";
> }; echo
0...1...2...3...4...5...6...7...
在bash中使用花括号语法的
for
循环?我无法使用非算术for
循环来复制它,man页和help
都似乎需要do
:$ help for
<SNIP>
for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done
Arithmetic for loop.
Equivalent to
(( EXP1 ))
while (( EXP2 )); do
COMMANDS
(( EXP3 ))
done
哦,如果我只是……
$ ((i=0)); while ((i<8)) { printf '%d...' "$i"; ((i++)); }
-bash: syntax error near unexpected token `{'
不行!
这个带括号的 for-loop
语法在哪里有文件记录呢?(官方记录?)
- 这是 Bash 中表示算术 for 循环的合法方式吗?
- 我是否疏忽了传统的算术 for 循环对输入的解释?
P.S. – 这在 OS X Mavericks 上经过 homebrew 安装的 Bash 4.2.45(2)-release 和自带的 3.2.51(1)-release 的测试。
{ }
和do done
都是命令分组结构。它们通常不能互换,但在循环和if语句的上下文中可以互换。 - Sammitchdo...done
结构不能在可以使用{ ... }
的地方使用; 只能在for
、while
或until
循环后使用do...done
,而您可以在任何命令可以出现的地方编写{ echo Hi; }
(例如if { echo Hi; }; then echo Lo; fi
)。do
和done
无法实现这一点。 - Jonathan Leffler