I have a shell script which contains the following:
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;
Are semicolons completely superfluous in the snippet above? And is there any reason for some people using double semicolons?
It appears semicolons are only a separator, something you would use instead of a new line.
Single semicolons at the end of a line are superfluous, since the newline is also a command separator.
case
specifically needs double semicolons at the end of the last command in each pattern block; seehelp case
for details.In the special case of find, ; is used to terminate commands invoked by -exec. See the answer of @kenorb to this question.
According to
man bash
:So, the
;
can be metacharacter or control operator, while the;;
is always a control operator (in case command).In your particular code, all
;
at the end of line are not needed. The;;
is needed however.@Ignacio Vazquez-Abrams
Actually this is not completely accurate, single semicolons at the end of a line are not superfluous and are definitely not the same thing as new lines.
From the Bash Reference Manual
Commands that are separated by "new line" might be executed in parallel when commands separated by semicolon are always executed sequentially
@Opensourcebook-Amit
newlines equivalent to single semicolon (;) on terminal or in shell script.
See the below examples:
On termainal: [root@server test]# ls;pwd;
On shell script:
[root@server test]# cat test4.sh
echo "Current UserName:" whoami
echo -e "\nCurrent Date:";date;
[root@server test]#
But I am not agree with the comment that & is equivalent to newline or single semicolon
& is run commands in background also a command separator but not worked as semicolon or newline.