在一行中使用计数器循环 BASH

Sta*_*low 0 bash loops

我等待程序完成并且什么也不打印;但是这个循环介绍:

while [ 0 > 0 ]; do echo 1; done
Run Code Online (Sandbox Code Playgroud)

逻辑上 0 不是 > 到 0 ......为什么要循环?

我如何通过屏幕什么也得不到?和程序完成好吗?

在我的节目“无事可做”之后:

while [ 0 > 0 ]; do echo 1; done
Run Code Online (Sandbox Code Playgroud)

我喜欢一行:

q = 0; while [ q < 9 ]; q ++; do echo q; done
Run Code Online (Sandbox Code Playgroud)

可以在一行中吗?

谢谢

use*_*own 5

q = 0; while [ q < 9 ]; q ++; do echo q; done
Run Code Online (Sandbox Code Playgroud)

一行只有 5 个错误。

  • q=0 赋值运算符周围不能有空格
  • q ++ 必须是双圆括号
  • q < 9 必须是 -lt(小于)
  • 在单括号中 [ $q -lt 9 ] q 需要是 $q
  • do 应该遵循 while

可能的解决方案:

q=0; while [[ q -lt 3 ]]; do ((q++)); echo $q; done
1
2
3
Run Code Online (Sandbox Code Playgroud)

回显值可以用

echo {1..9}
Run Code Online (Sandbox Code Playgroud)

也是,但不灵活,所以你不能在里面使用变量扩展,比如 echo {1..$n}. 进行初始化、增量和阈值检查的规范方法是 for 循环:

 for (( q=1; q < 4; ++q)); do  echo $q ; done
Run Code Online (Sandbox Code Playgroud)

有一个外部程序 seq,不是那么推荐,因为这个原因:

seq 1 3 
Run Code Online (Sandbox Code Playgroud)

第一个问题:

while [ 0 > 0 ]; do echo 1; done
Run Code Online (Sandbox Code Playgroud)

查找您使用文件重定向(而不是 -gt)的文件 0,例如 echo foo > 0.file

代替

while [ 0 -gt 0 ]; do echo 1; done
Run Code Online (Sandbox Code Playgroud)

因为它什么都不做。它不等待任何东西。要么你的程序是顺序的,那么无论如何它都在那个点完成了。或者有后台运行的程序/命令,无论如何都不关心这个反循环。


Nik*_*vin 0

对于第二个问题,请使用 for (( expr1 ; expr2 ; expr3 )) ; 做清单;完毕

另请参阅man bash