代码之家  ›  专栏  ›  技术社区  ›  None

“if(…)then”中缺少分号并且没有语法错误?

  •  2
  • None  · 技术社区  · 8 年前

    完整脚本:

    interval () {
        INTERVAL="$*"
        WHEN_TO_RUN=0
        while read LINE; do
            if (( $(epoch 0S) >= $WHEN_TO_RUN )) then
                echo $LINE
                WHEN_TO_RUN="$(epoch $INTERVAL)"
            fi
        done
    }
    

    有问题的行:

    if (( $(epoch 0S) >= $WHEN_TO_RUN )) then
    

    if [ $(epoch 0S) -ge $WHEN_TO_RUN ]; then
    

    在OSX上(如果相关)

    1 回复  |  直到 8 年前
        1
  •  3
  •   Charles Duffy    8 年前

    (( )) $((...)) ((...)) 作为一个命令,语法是作为扩展的元素)。因此,它的目标是与ksh的实现兼容——而且毫无疑问,它是一个独立的命令,以 )) . 不像 [ --没有特殊解析时间处理的常规命令 [1] (( ,因此需要知道它),以便解析器知道算术命令何时结束。

    在bash2.05之前,命令后面必须有一个命令分隔符,即使在条件上下文中也是如此。但是,这与上游ksh实现不兼容,因此bash被修改为在此上下文中显式不需要分隔符。


    - 做 在bash中有一个内置的实现,但是它只在命令调度时涉及,而不是在解析时。