Beaucoup des raisons sont historiques. Cela ne signifie pas qu'elles n'ont pas de sens aujourd'hui.
Problèmes de portabilité
Lorsque vous donnez un nom à un fichier, vous devez é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 à un autre système.
Ainsi, tant qu'il y avait la moindre possibilité que vous souhaitiez pouvoir accéder facilement au fichier à partir d'un ancien système, vous choisiriez uniquement un caractère sûr. 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 soient encore d'une certaine manière basées sur MS-DOS.
Longueur
Un système de fichiers peut limiter la longueur d'un fichier. C'était encore plus sérieux à l'époque où MS-DOS était limité à des noms de fichiers 8.3. Ainsi, en laissant de côté les espaces, vous pouviez mettre plus de caractères significatifs dans le nom.
Divers autres systèmes de fichiers ont également défini des limites strictes sur la longueur de leur nom de fichier. Wikipedia propose un tableau dans l'article sur la comparaison des systèmes de fichiers pour ceux qui veulent les détails.
Caractères réservés
MS-DOS a également défini le caractère espace comme un caractère réservé. Cela est dû au fait que le caractère espace était utilisé pour le remplissage dans la FAT. De plus, MS-DOS ne prévoyait pas de système d'échappement dans l'interpréteur de commandes.
Interprétation de la ligne de commande
La plupart des lignes de commandes que je connais utilisent le caractère espace comme délimiteur de paramètres. En négligeant d'échapper correctement un nom de fichier, cela peut avoir des conséquences désastreuses car des parties du nom de fichier peuvent être interprétées comme des paramètres de l'application que vous vouliez appeler.
Considérez la différence entre
rm foo bar
et
rm "foo bar"
L'article WikiPedia lié ci-dessus souligne même l'ambiguïté introduite par le fait de ne pas échapper correctement une commande :
L'ambiguïté peut être évitée soit en interdisant les espaces imbriqués dans les noms de fichiers et de répertoires (par exemple, en les remplaçant par des traits de soulignement '_'), soit, si pris en charge par l'interpréteur de commandes et les programmes prenant ces paramètres comme arguments, en encadrant un nom contenant des espaces entre des guillemets ou en utilisant un caractère d'échappement avant l'espace, généralement un antislash ('\'). Par exemple
Chemin long/Nom de programme long Paramètre un Paramètre deux ...
est ambigu (le "nom de programme" fait-il partie du nom du programme ou de deux paramètres ?) ; cependant
Chemin_long/Nom_de_programme_long Paramètre_un Paramètre_deux ...,
"Chemin long/Nom de programme long" "Paramètre un" "Paramètre deux" ...
et Long\ chemin/Long\ nom\ de\ programme Paramètre\ un Paramètre\ deux ...
ne sont pas ambigus.
Uniform Resource Locators (URL)
Lorsque vous essayez de décrire l'emplacement d'un fichier à l'aide d'une URL, les espaces doivent être échappés.
Les caractères peuvent être dangereux pour diverses raisons. Le caractère espace est dangereux car les espaces significatifs peuvent disparaître et des espaces insignifiants peuvent être introduits lors de la transcription ou de la saisie des URL ou soumis au traitement de programmes de traitement de texte.
Source : RFC1738
Ainsi, un espace doit être remplacé par un %20
à la place. Cela rend la partie du nom de fichier de l'URL moins lisible et incite donc les gens à l'éviter en premier lieu.