分号在shell脚本的行尾是多余的?

我有一个shell脚本,其中包含以下内容:

case $1 in 0 ) echo $1 = 0; OUTPUT=3;; 1 ) echo $1 = 1; OUTPUT=4;; 2 ) echo $1 = 2; OUTPUT=4;; esac HID=$2; BUNCH=16; LR=.008; 

在上面的代码片段中, 分号完全是多余的吗? 有人使用双分号有什么理由吗?

它似乎分号只是一个分隔符,你会使用,而不是一个新的行。

换行符的单个分号是多余的,因为换行符也是一个命令分隔符。 在每个模式块的最后一个命令结束时,特别需要双分号; 详情请参阅help case

根据man bash

  metacharacter A character that, when unquoted, separates words. One of the following: | & ; ( ) < > space tab control operator A token that performs a control function. It is one of the following symbols: || & && ; ;; ( ) | |& <newline> 

那么, 可以是元字符或控制操作符,而;; 总是一个控制操作符(在命令的情况下)。

在你的特定代码中,所有; 在行的末尾是不需要的。 ;; 但是需要。

在查找的特例中, 用于终止由-exec调用的命令。 看到@kenorb对这个问题的答案。

@Ignacio巴斯克斯 – 艾布拉姆斯

其实这并不是完全准确的,一行尾部的单个分号并不是多余的,绝对不是新行。

从Bash参考手册

以';'分隔的命令 按顺序执行; shell等待每个命令依次终止。 返回状态是执行的最后一个命令的退出状态。

当用“分隔符”分隔的命令总是按顺序执行时,用“新行”分隔的命令可能会并行执行