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.