"while:"vs."while true"

hel*_*hod 97 bash

当你看看应该如何实现无限循环时,你通常会看到这种方法:

while :
do
  # loop infinitely
done
Run Code Online (Sandbox Code Playgroud)

但我只是不明白:这里的用法.使用不是更好吗:

while true
do
  # loop infinitely
done
Run Code Online (Sandbox Code Playgroud)

pho*_*xis 69

来自手册:

:[参数]没有效果; 除扩展参数和执行任何指定的重定向之外,该命令不执行任何操作.返回零退出代码.

因为它总是返回零,因此类似于用作 true

看看这个答案:`:'(冒号)GNU Bash内置的目的是什么?


unw*_*ind 23

冒号是一个内置命令,什么都不做,但返回0(成功).因此,它比调用实际命令做同样的事情更短(和更快).

  • 这些差异与命令vs builtins无关,因为它们都是内置的.这纯粹是bash正在处理的额外字符数.`while:some gibberish`,仍然只使用`:`,比`true`慢.将此与外部命令进行比较,例如`while/bin/true`,它实际上要慢一百倍. (12认同)
  • 这是真的。`i = 0; 真实的时间 做((i ++> 100000))&& break; 完成`比冒号版本需要更长的时间。 (2认同)
  • 由于 `while true` 和 `while 1` 之间的差异,我在一个红鲱鱼之后发现了这个问题 - 结果是 `1` 是 `cd -` 的别名,这显然是通过但打印 `~`(我当时的 cwd .) 一个关于 `:` 的警告我在尝试之后注意到:通常的规则适用于 `:`,所以你需要用分号结束它(或者在这种情况下换行,你有一个未关闭的块.) 所以,对于单行,你应该写 `while :; 做 ...; done` 而不是 `while :\n do ...\n done`。这真的不是一个警告。 (2认同)