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

6

我等待程序完成并且没有输出任何东西;但是这个循环介绍:

while [ 0 > 0 ]; do echo 1; done

逻辑上,0不是大于0的...为什么会进入循环?

我如何在屏幕上得到空白?而程序又可以正常结束?

在我的程序“无事可做”之后:

while [ 0 > 0 ]; do echo 1; done

我喜欢用一行代码表达:

q = 0; while [ q < 9 ]; q ++; do echo q; done

一行代码实现可能吗?

谢谢


1
可能是重复问题 - user202729
你为什么要重定向到一个名为0的文件? - Toby Speight
2个回答

13
q = 0; while [ q < 9 ]; q ++; do echo q; done

一行代码里有5个错误。

  • q=0周围不应该有空格
  • q ++ 应该在双括号中
  • q < 9 应该写成-lt(小于)
  • 在单括号 [ $q -lt 9 ] 中,q 需要加上 $
  • do 应该放在 while 后面

可能的解决方案:

q=0; while [[ q -lt 3 ]]; do ((q++)); echo $q; done
1
2
3

回显值可以使用 echo 完成。
echo {1..9}

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

 for (( q=1; q < 4; ++q)); do  echo $q ; done

有一个外部程序seq,它并不是一个被强烈推荐的选择,原因如下:

seq 1 3 

第一个问题:

while [ 0 > 0 ]; do echo 1; done

寻找一个使用文件重定向(而不是 -gt)的文件0,就像在 echo foo > 0.file 中一样。

而不是

while [ 0 -gt 0 ]; do echo 1; done

因为它什么都不做。它不等待任何东西。如果你的程序是顺序执行的,那么无论如何,在那个点上它都已经完成了。或者是在后台运行一个程序/命令,它根本不会理会这个反循环。


0

针对您的第二个问题,可以使用 for (( expr1 ; expr2 ; expr3 )) ; do list ; done

同时参考man bash


谢谢;关于我的第一个问题,能提供一些帮助吗?(((0不是大于0...为什么会进入循环?))) - Stackoverflow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接