【问题标题】:Loop BASH with counter in one line在一行中使用计数器循环 BASH
【发布时间】:2018-03-23 00:54:39
【问题描述】:

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

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

一行可以吗?

谢谢

【问题讨论】:

标签: bash loops


【解决方案1】:
q = 0; while [ q < 9 ]; q ++; do echo q; done

一行只有 5 个错误。

  • q=0 赋值运算符周围可能没有空格
  • q ++ 必须在双圆括号中
  • q
  • 在单括号中 [ $q -lt 9 ] q 需要是 $q
  • do 应该跟随 while

可能的解决方案:

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

可以使用

来完成回显值
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 &gt; 0.file 中。

代替

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

因为它什么都不做。它不等待任何东西。要么你的程序是连续的,然后无论如何它都在那个时候完成。或者后台有程序/命令在运行,反正不管这个反循环。

【讨论】:

    【解决方案2】:

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

    另请参阅man bash

    【讨论】:

    • 谢谢;关于/围绕我的第一个 Q 的一些帮助? ((((0 不是 > 到 0...为什么要循环?)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    相关资源
    最近更新 更多