Muitas das razões são históricas. Isso não significa que eles não façam sentido hoje.
Problemas na portabilidade
Ao nomear um arquivo, você também pode considerar como outros sistemas (de arquivo) tratarão esse nome de arquivo. Um caractere em um nome de arquivo pode ser bom para o seu sistema, mas pode ser um problema para outro sistema.
Assim, desde que houvesse a menor possibilidade de você poder acessar o arquivo facilmente de um sistema antigo, você escolheria apenas o caractere seguro . Isso pode incluir a inicialização em um antigo sistema de recuperação mantido por você ou o medo de que versões recentes do Windows ainda sejam de alguma forma baseadas no MS-DOS.
Comprimento
Um sistema de arquivos pode limitar o tamanho que um arquivo pode ter. Isso foi ainda mais sério durante os dias em que o MS-DOS estava limitado a 8.3 nomes de arquivos . Assim, deixar de fora os espaços permitiu que você colocasse caracteres mais significativos no nome.
Vários outros sistemas de arquivos também definiram limites estritos em seu comprimento de nome de arquivo. A Wikipedia tem uma tabela no artigo sobre comparação de sistemas de arquivos para aqueles que querem 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 o preenchimento no FAT . Além disso, o MS-DOS não fornecia um sistema de escape no shell.
Interpretação de 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 deixar de escapar corretamente de um nome de arquivo, isso pode ter consequências desastrosas, já que 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 também aponta a ambiguidade introduzida pela falta de um escape para um comando:
Ambiguity can be prevented either by prohibiting embedded spaces in file- and directory names in the first place (for example, by substituting them with underscores '_'), or, if supported by the command-line interpreter and the programs taking these parameters as arguments, by enclosing a name with embedded spaces between quote characters or using a escape character before the space, usually a backslash ('\'). For example
Long path/Long program name Parameter one Parameter two ...
is ambiguous (is "program name" part of the program name, or two parameters?); however
Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...
and
Long\ path/Long\ program\ name Parameter\ one Parameter\ two ...
are not ambiguous.
Localizadores uniformes de recursos (URL)
Ao tentar descrever a localização de um arquivo, usando uma URL, os espaços precisam ser escapados.
Characters can be unsafe for a number of reasons. The space
character is unsafe because significant spaces may disappear and
insignificant spaces may be introduced when URLs are transcribed or typeset or subjected to the treatment of word-processing programs.
Fonte: RFC1738
Assim, um espaço deve ser substituído por um %20
. Isso torna a parte do nome do arquivo da URL menos legível e, assim, faz com que as pessoas a evitem em primeiro lugar.