wait$! é um erro de sintaxe, você está perdendo um espaço. Isso não tem nenhum impacto aqui porque você nunca inicia uma tarefa em segundo plano, então $! permanece vazio e o comando é wait sem argumento, que aguarda todos os trabalhos em segundo plano - e como não há nenhum, ele retorna imediatamente.
Há uma diferença entre usar wget --background … e wget … & . O primeiro comando diz wget para bifurcar um processo filho e, em seguida, sair:
(bash)
fork ——————————————→
wait exec wget --background …
⋮
⋮ fork ———————————————————————→
←—————————————— exit download
(next script line) ⋮
Quando o pai wget process (que é um primeiro plano) retorna, bash retoma a execução do processo. Com wget … & , o shell cria um processo em segundo plano:
(bash)
fork ——————————————————→
(next script line) exec wget --background …
download
⋮
Nesse caso, você pode aguardar o processo do wget sair:
wget … &
wait $!
No entanto, isso é inútil: iniciar um trabalho em segundo plano apenas para esperar é equivalente a iniciar um trabalho em primeiro plano.
wget …