Com tantos caracteres que você pode achar que não devem ser especiais, na verdade, sendo especiais, eu só uso os caracteres especiais de qualquer maneira. Isso também me coloca nos bons hábitos de usar o bash completion, onde ele irá auto-escapar todos os caracteres especiais em um nome de arquivo. Mas também me coloca nos bons hábitos de escapar / citando TUDO em scripts e multi-part 1-liners no bash.
Por exemplo, em apenas um simples liner:
for file in *.txt; do something.sh "$file"; done
Dessa forma, mesmo que um dos arquivos tenha um espaço, ou algum outro caractere, a parte do
do loop ainda atuará nele, e não perderá 2 ou mais partes de nome de arquivo, possivelmente causando efeitos colaterais não intencionais.
Como não consigo controlar a nomenclatura de espaço / não-espaço de CADA arquivo que encontro, e se eu tentei, provavelmente quebraria alguns symlinks em algum lugar, causando ainda mais consequências não intencionais, só espero que todo nome de arquivo / diretório possa ter espaços nela, e apenas cite / escape todas as variáveis para compensar.
Então, eu uso apenas os caracteres que eu quero (geralmente espaços) em nomes de arquivos.
Eu até uso espaços em nomes de conjuntos de dados ZFS, o que eu tenho que admitir que causou uma boa quantidade de arranhões entre os desenvolvedores que escrevem o software para o NAS que eu uso.
Resumindo: os espaços não são um caractere inválido , portanto, não há motivo não para usá-los.