Beaucoup de raisons sont historiques. Cela ne signifie pas qu'ils n'ont pas de sens aujourd'hui.
Problèmes de portabilité
Lorsque vous nommez un fichier, vous devrez peut-être également considérer comment d'autres systèmes (de fichiers) traiteront ce nom de fichier. Un caractère dans un nom de fichier peut convenir à votre système, mais peut poser problème pour un autre système.
Ainsi, dans la mesure où il est tout à fait possible que vous souhaitiez pouvoir accéder facilement au fichier à partir d'un système ancien, vous ne choisissez que des caractères sûrs . Cela peut inclure le démarrage dans un ancien système de récupération que vous avez conservé ou la crainte que les versions récentes de Windows reposent encore sur MS-DOS.
Longueur
Un système de fichiers peut limiter la longueur d'un fichier. Cela était encore plus grave à l'époque où MS-DOS était limité à 8,3 noms de fichiers . Ainsi, laisser des espaces vous a permis de mettre des noms plus significatifs dans le nom.
Plusieurs autres systèmes de fichiers ont également défini des limites strictes pour la longueur des noms de fichiers. L'article de Wikipédia contient une table sur la comparaison du système de fichiers pour ceux qui veulent des détails
Caractères réservés
MS-DOS a également défini le caractère d'espace en tant que caractère réservé. Cela est dû au fait que le caractère espace a été utilisé pour le remplissage dans la FAT . En outre, MS-DOS n'a pas fourni de système d'échappement dans le shell.
Interprétation en ligne de commande
La plupart des lignes de commande que je connais utilisent le caractère espace comme délimiteur de paramètre . Si vous négligez d'échapper correctement à un nom de fichier, cela peut avoir des conséquences désastreuses, car certaines parties du nom de fichier peuvent être interprétées comme des paramètres de l'application que vous souhaitez appeler.
Considérez la différence entre
rm foo bar
et
rm "foo bar"
L'article de WikiPedia lié ci-dessus souligne même l'ambiguïté introduite par le manque pour échapper correctement à une commande:
On peut éviter l’ambiguïté en interdisant d’abord les espaces incorporés dans les noms de fichiers et de répertoires (par exemple, en les remplaçant par des tirets bas "_"), ou, si pris en charge par l’interpréteur de ligne de commande et les programmes prenant ces paramètres comme arguments, en insérant un nom avec des espaces incorporés entre guillemets ou en utilisant un caractère d'échappement avant l'espace, généralement une barre oblique inversée ('\'). Par exemple
Long path/Long program name Parameter one Parameter two ...
est ambigu ("nom du programme" fait-il partie du nom du programme ou deux paramètres?); pourtant
Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...
et Long \ path / Long \ program \ name Parameter \ one Parameter \ two ...
ne sont pas ambigus.
Uniform Resource Locators (URL)
Lorsque vous essayez de décrire l'emplacement d'un fichier à l'aide d'une URL, vous devez échapper des espaces.
Les caractères peuvent être dangereux pour plusieurs raisons. Le caractère d'espace est dangereux car des espaces significatifs peuvent disparaître et des espaces insignifiants peuvent être introduits lors de la transcription ou de la composition d'URL, ou soumis au traitement de programmes de traitement de texte.
Source: RFC1738
Ainsi, un espace doit être remplacé par un %20
. Cela rend le nom de fichier de l'URL moins lisible et, par conséquent, empêche les gens de l'éviter en premier lieu.