Dash double semicolon (;;) syntax
;;
is only used in case
constructs, to indicate the end of an alternative. (It's present where you have break
in C.)
case $answer in
yes) echo 'yay!';;
no) echo 'boo!';;
esac
Syntactically, ;
and &
both mark the end of a command. A newline is equivalent to ;
, in a first approximation. The difference between them is that ;
or newline indicates that the command must be executed in the foreground, whereas &
indicates that the command must be executed in the background.
So here you need & wait
. & ;
is a syntax error (you can't have an empty command). & ;;
is also a syntax error; ash lets it go (as if you'd written just &
), but bash complains. Evidently your sh is some ash variant (such as dash, which is /bin/sh
on many Debian derivatives).
It should be used in a case
statement, between cases. The issue you're having here is that both &
and ;
are command separators, and you should only be using one of them.