Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 'if(…)'then'中缺少分号并且没有语法错误?_Shell_If Statement_Syntax - Fatal编程技术网

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

Shell 'if(…)'then'中缺少分号并且没有语法错误?,shell,if-statement,syntax,Shell,If Statement,Syntax,有人指出了一个简单shell脚本中缺少的分号,我很好奇为什么它没有抛出语法错误 完整脚本: interval () { INTERVAL="$*" WHEN_TO_RUN=0 while read LINE; do if (( $(epoch 0S) >= $WHEN_TO_RUN )) then echo $LINE WHEN_TO_RUN="$(epoch $INTERVAL)" f

有人指出了一个简单shell脚本中缺少的分号,我很好奇为什么它没有抛出语法错误

完整脚本:

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上,if relevant是一个取自ksh的“算术命令”扩展,允许在shell脚本中使用C风格的数学语法(POSIX将
$(…)
指定为扩展语法;
(…)
作为命令语法是扩展的元素)。因此,它的目标是与ksh的实现兼容——毫无疑问,它是一个独立的命令,以
结尾。不像
[
——一个没有特殊解析时间处理的常规命令[1]——它在语法上是重要的(解析器必须在
内部有不同的行为)((
,因此需要知道它),所以解析器知道算术命令何时结束

在bash 2.05之前,命令分隔符是必需的,即使在条件上下文中也是如此。但是,这与上游ksh实现不兼容,因此bash被修改为在此上下文中显式不需要分隔符



[1] -
[
在bash中确实有一个内置的实现,但它只在命令分派时参与,而不是在解析时参与。

是语法,而
[
是常规命令(为了性能,有一个内置的实现,但语义相当于一个外部工具);解析器对它们的处理方式有所不同……一般来说,这并不特定于
if
语句,而是特定于
(())
…请参见与先前存在的SO问题密切相关的一个问题(对于更一般的主题,而不是命令分隔符语法)..re:all caps namespace,请参阅,记住shell和环境变量共享一个名称空间:包含小写字母的环境变量名称的名称空间为应用程序保留。应用程序可以使用此名称空间中的名称定义任何环境变量,而无需修改标准uti的行为但是,是的,shell(不幸的)与JavaScript具有相同的设计缺陷,即变量是全局的,除非另有明确声明。(顺便说一句,ksh
函数functname的起源){
语法是,当第一次在ksh中实现时,当在这样定义的函数中用
类型声明变量时,默认情况下,它使变量成为局部变量,而用普通POSIX样式
类型声明的函数声明全局变量;然而,在bash中,
函数
与POSIX complia相比没有任何好处nt语法)。