Конец одной команды (";") подразумевается новой строкой. В версии oneline } анализируется как аргумент для команды unterminated ls -a. Что вы можете увидеть, если вы это сделаете:
$ foo(){ echo "a" }
}
$ foo
a }
Посмотрите, как команда внутри декларации функции проглатывает конечную фигурную скобку?