Muitas das razões são históricas. Isso não significa que eles não fazem sentido hoje.
Problemas de portabilidade
Ao nomear um arquivo, você também deve considerar como outros sistemas (arquivos) tratam esse nome. Um caractere em um nome de arquivo pode ser bom para o seu sistema, mas pode ser um problema para outro sistema.
Portanto, contanto que houvesse a menor possibilidade de você poder acessar o arquivo facilmente de um sistema antigo, você escolheria apenas caracteres seguros . Isso pode incluir a inicialização em um sistema de recuperação antigo que você mantinha por aí ou o medo de que as versões recentes do Windows ainda sejam baseadas no MS-DOS.
comprimento
Um sistema de arquivos pode limitar o tamanho que um arquivo pode ter. Isso foi ainda mais sério nos dias em que o MS-DOS estava limitado a nomes de arquivos 8.3 . Portanto, deixar de fora os espaços permitiu inserir caracteres mais significativos no nome.
Vários outros sistemas de arquivos também definiram limites estritos no tamanho do nome do arquivo. A Wikipedia possui uma tabela no artigo sobre comparação de sistemas de arquivos para aqueles que desejam os detalhes.
Caracteres reservados
O MS-DOS também definiu o caractere de espaço como um caractere reservado. Isso se deve ao fato de que o caractere de espaço foi usado para preenchimento no FAT . Além disso, o MS-DOS não forneceu um sistema de escape no shell.
Interpretação da linha de comando
A maioria das linhas de comando que conheço usa o caractere de espaço como um delimitador de parâmetro . Ao negligenciar o escape adequado de um nome de arquivo, isso pode ter consequências terríveis, pois partes do nome do arquivo podem ser interpretadas como parâmetros para o aplicativo que você deseja chamar.
Considere a diferença entre
rm foo bar
e
rm "foo bar"
O artigo da WikiPedia vinculado acima ainda aponta a ambiguidade introduzida pela falta para escapar adequadamente de um comando:
A ambiguidade pode ser evitada proibindo-se espaços incorporados nos nomes de arquivos e diretórios (por exemplo, substituindo-os por sublinhados '_') ou, se suportado pelo interpretador de linha de comando e pelos programas que utilizam esses parâmetros como argumentos, colocando um nome com espaços incorporados entre caracteres de aspas ou usando um caractere de escape antes do espaço, geralmente uma barra invertida ('\'). Por exemplo
Long path/Long program name Parameter one Parameter two ...
é ambíguo ("nome do programa" faz parte do nome do programa ou dois parâmetros?); Contudo
Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...
e Long \ path / Long \ program \ name Parâmetro \ um Parâmetro \ dois ...
não são ambíguos.
Localizadores uniformes de recursos (URL)
Ao tentar descrever o local de um arquivo, usando uma URL, os espaços precisam ser escapados.
Os caracteres podem não ser seguros por vários motivos. O caractere de espaço é inseguro, pois espaços significativos podem desaparecer e espaços insignificantes podem ser introduzidos quando URLs são transcritas ou digitadas ou submetidas ao tratamento de programas de processamento de texto.
Fonte: RFC1738
Assim, um espaço deve ser substituído por um %20
. Isso torna o nome do arquivo parte da URL menos legível e, portanto, faz com que as pessoas o evitem em primeiro lugar.