Respostas:
BTW, a questão principal é que os shells (derivados de Bourne) não permitem comandos vazios.
";" e "&" são terminadores de comando, significando fg e bg respectivamente. Então "; ;" (ou ";" no início de uma linha) também é inválido.
(As novas linhas implicam ";" se houver um comando ainda não finalizado, a menos que você use "\" para continuar a linha.)
Os idiomas variam muito nessas políticas:
Linguagens derivadas de C permitem declarações vazias.
Pascal e PERL têm separadores, não terminadores.
Não, é apenas confuso e não consegue entender exatamente o que você quer dizer.
Você precisa agrupar o & com o comando que deseja colocar em segundo plano:
$ (evince foo.pdf bar.pdf &); emacs foo.tex &
Isso funciona bem. Ainda mais explícito seria:
$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)
Especialmente se você também quisesse encadear mais comandos após o final.
if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi