Você definiu uma variável i
para cada nome de arquivo no loop, mas o expansão de parâmetro espera ver o nome da variável imediatamente após o ${
; em vez disso, você colocou no final, pouco antes da chave de fechamento.
Como você deseja remover apenas o texto da frente do nome do arquivo, use esta sintaxe:
for i in *.mp3 ; do echo "${i#[0-9][0-9][0-9] - }" ; done
que removerá 3 dígitos principais seguidos por espaço de traço no espaço.