Você não usa o ; com '&', o '&' por conta própria é suficiente para terminar o comando. Eu acredito que atualmente não há menção a esse comportamento no manual. Seu loop seria simplesmente:
for dir in $(ls); do command $dir & done
Além disso, você deve considerar o uso de glob, em vez de $(ls) , que falhará se o nome do arquivo contiver espaço em branco. Você pode definir nullglob para impedir que dir seja um * se não houver arquivos:
shopt -s nullglob
for dir in *; do command $dir & done