我有一个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;
上面的片段中的分号是完全多余的吗?有些人使用双分号是否有任何理由?
看起来分号只是一个分隔符,你可以使用它来代替新行。
一行末尾的单个分号是多余的,因为换行符也是一个命令分隔符。 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命令中)。
在您的特定代码中,不需要在行尾的所有;
。然而,需要;;
。
在查找的特例中;用于终止-exec调用的命令。请参阅@kenorb给这个question的答案。
@阿米特 - Opensourcebook
相应于终端或shell脚本中的单个分号(;)的换行符。
请参阅以下示例:
在终端上:[root @ server test] #ls; pwd;
在shell脚本上:
[root @ server test] #cat test4.sh
echo“当前用户名:”whoami
echo -e“\ n当前日期:”;日期;
[root @ server test]#
但我不同意这一评论相当于换行符或单个分号
&在后台运行命令也是一个命令分隔符,但不能用作分号或换行符。
@Ignacio Vazquez-Abrams
实际上这并不完全准确,一行末尾的单个分号不是多余的,绝对不是新行。
由';'分隔的命令按顺序执行; shell等待每个命令依次终止。返回状态是最后执行的命令的退出状态。
当由分号分隔的命令总是按顺序执行时,由“新行”分隔的命令可以并行执行