}; echo 0...1...2...3...4...5...-6ren">
gpt4 book ai didi

bash - 带大括号的 bash 循环?

转载 作者:行者123 更新时间:2023-11-29 08:55:08 25 4
gpt4 key购买 nike

我偶然发现了这个奇怪的地方,但不太明白它为什么会起作用:

$ for ((i=0;i<8;i++)) {
> printf '%d...' "$i";
> }; echo
0...1...2...3...4...5...6...7...

bash 中使用 brace 语法的 for 循环?我根本无法使用非算术 for 循环重现此内容,联机帮助页和 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语法吗

  1. 在任何地方记录(官方?)
  2. 在 Bash 中表示算术 for 循环的合法不同方式?
  3. 关于循环的“正常”算术如何解释输入,我只是缺少一些东西吗?

附言– 这在 OS X Mavericks 上进行了测试,包括自制软件安装的 Bash 4.2.45(2) 版本和 vanilla 3.2.51(1) 版本。

最佳答案

将一些评论转化为答案:

AFAIK,它是 Bash 中的一个主要未记录的 hack,可能需要与 Bourne shell 兼容,后者也支持大括号表示法,也未记录。它不是 Mac OS X 特有的;它也像在 Ubuntu 12.04 上那样工作。不过,它似乎不适用于 Bash 中的 while 循环或 until 循环。

How do you write an arithmetic for loop in Bourne shell syntax?

这是一种可选的编写for循环体的方法;条件在 Bourne shell 中的写法会有所不同,但您可以这样写

for i in 1 2 3
{
echo $i
}

在 Bourne shell 中,或使用 do 代替 {done 代替 }

(我忘记了它的存在,直到你的问题让我想起它;我从来没有认真地使用过它,因为它没有被记录下来,因此不能保证得到支持。)

do ... done 结构不能用在可以使用 { ... } 的地方;您只能在 forwhileuntil 循环之后使用 do ... done,而您可以编写{ echo 你好; } 命令可能出现的任何地方(例如 if { echo Hi; }; then echo Lo; fi。你不能用 do完成

检查此答案准确性的最佳方法可能是下载 Heirloom Bourne Shell来自传家宝项目。


我已经下载了 Heirloom Bourne Shell(一个 CVS 存储库)的源代码并构建了它,并对其进行了测试。它确实在 for 循环之后接受大括号,并且拒绝将它们识别为 dodoneuntil 之后的替代项while 循环。

关于bash - 带大括号的 bash 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22619510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com