在 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;

在上面的代码片段中,分号是否是完全多余的? 有些人使用双分号是否有什么原因?

分号似乎只是一个分隔符,您可以使用它来代替新行。

75962 次浏览

行尾的单个分号是多余的,因为换行符也是命令分隔符。case特别需要在每个模式块的最后一个命令末尾使用双分号; 详细信息请参阅 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>

因此,;可以是元字符或控制操作符,而 ;;始终是控制操作符(在 case 命令中)。

In your particular code, all ; at the end of line are not needed. The ;; is needed however.

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

@ 公开资料-阿米特

换行符相当于终端上或 shell 脚本中的单个分号 ;

See the below examples:

终点站:

[root@server test]# ls;pwd;

关于 shell 脚本:

[root@server test]# cat test4.sh


echo "Current UserName:"
whoami


echo -e "\nCurrent Date:";date;


[root@server test]#

但我不同意 &等同于换行或单个分号的说法

&是在后台运行的命令,也是一个命令分隔符,但不作为分号或换行符使用。