Você precisa colocar aspas duplas em torno de todas as substituições de comando e variável.
set -- "$(basename -- "$file")"
Se você permitir que o valor da variável seja dividido em palavras e essas palavras sejam tratadas como padrões globais, não haverá retorno. Você não pode mais informar quantos espaços estavam lá ou se os nomes de arquivos eram o resultado de uma expansão de caractere curinga. Você não pode transformar o hambúrguer de volta em uma vaca, então você deve se certificar de não enviar a vaca para o matadouro em primeiro lugar.