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

Nag*_*gel 92 syntax bash 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;
Run Code Online (Sandbox Code Playgroud)

分号完全是多余的在上面的代码片段?有些人使用双分号是否有任何理由?

看起来分号只是一个分隔符,你可以使用它来代替新行.

Ign*_*ams 135

一行末尾的单个分号是多余的,因为换行符也是一个命令分隔符.case特别是在每个模式块的最后一个命令的末尾需要双分号; 看help case详情.

  • 大!所以,如果我理解正确,我可以安全地删除任何行末尾的任何单个分号,但绝不会加倍? (14认同)
  • @MaXi32 我试图用我的牙齿来支持你的评论,这样我就不会忘记怎么吃:-) (2认同)

Mic*_*jer 27

根据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>
Run Code Online (Sandbox Code Playgroud)

因此,;可以是元字符或控制操作符,而;;始终是控制操作符(在命令情况下).

在您的特定代码中,;不需要所有行尾.该;;然是必要的.

  • `;`和`;;`之间的实际区别是什么?我对BASH语法解析不够熟悉,不知道BASH称之为"元字符"和它称之为"控制运算符"的实际区别. (2认同)

小智 7

在 find 的特殊情况下,;用于终止由 -exec 调用的命令。请参阅@kenorb 对此问题的回答