Viele Gründe sind historisch. Das heißt nicht, dass sie heute keinen Sinn ergeben.
Probleme bei der Portabilität
Beim Benennen einer Datei müssen Sie möglicherweise auch berücksichtigen, wie andere (Datei-) Systeme diesen Dateinamen behandeln. Ein Zeichen in einem Dateinamen ist möglicherweise in Ordnung für Ihr System, kann jedoch ein Problem für ein anderes System darstellen.
Solange also die geringste Möglichkeit bestand, dass Sie von einem älteren System aus problemlos auf die Datei zugreifen möchten, würden Sie nur sichere Zeichen auswählen . Dies kann das Booten in ein altes Wiederherstellungssystem beinhalten, das Sie in der Nähe haben, oder die Befürchtung, dass neuere Windows-Versionen immer noch irgendwie auf MS-DOS basieren.
Länge
Ein Dateisystem kann die Länge einer Datei begrenzen. Dies war in den Tagen, in denen MS-DOS auf 8.3-Dateinamen beschränkt war, noch schwerwiegender . Wenn Sie Leerzeichen weglassen, können Sie aussagekräftigere Zeichen in den Namen einfügen.
Einige andere Dateisysteme definierten ebenfalls strenge Grenzen für die Länge ihrer Dateinamen. Wikipedia hat eine Tabelle im Artikel über Dateisystemvergleich für diejenigen, die die Details wollen.
Reservierte Zeichen
MS-DOS hat das Leerzeichen auch als reserviertes Zeichen definiert. Dies ist darauf zurückzuführen, dass das Leerzeichen zum Auffüllen der FAT verwendet wurde . Darüber hinaus hat MS-DOS kein Escape-System in der Shell bereitgestellt.
Befehlszeileninterpretation
Den meisten Befehlszeilen ist bekannt, dass das Leerzeichen als Parameterbegrenzer verwendet wird . Wenn Sie es versäumen, einen Dateinamen ordnungsgemäß zu maskieren, kann dies schwerwiegende Folgen haben, da Teile des Dateinamens als Parameter für die Anwendung interpretiert werden können, die Sie aufrufen möchten.
Betrachten Sie den Unterschied zwischen
rm foo bar
und
rm "foo bar"
Der oben verlinkte WikiPedia-Artikel weist sogar auf Mehrdeutigkeiten hin, die dadurch entstanden sind, dass ein Befehl nicht ordnungsgemäß umgangen werden konnte:
Mehrdeutigkeiten können verhindert werden, indem eingebettete Leerzeichen in Datei- und Verzeichnisnamen zunächst verboten werden (z. B. durch Unterstriche '_' ersetzt werden) oder wenn dies vom Befehlszeileninterpreter und den Programmen unterstützt wird, die diese Parameter als verwenden Argumente, indem Sie einen Namen mit eingebetteten Leerzeichen zwischen Anführungszeichen setzen oder ein Escape-Zeichen vor dem Leerzeichen verwenden, normalerweise einen Backslash ('\'). Zum Beispiel
Long path/Long program name Parameter one Parameter two ...
ist mehrdeutig (ist "Programmname" Teil des Programmnamens oder zwei Parameter?); jedoch
Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...
und Long \ path / Long \ program \ name Parameter \ one Parameter \ two ...
sind nicht mehrdeutig.
Uniform Resource Locators (URL)
Beim Versuch, den Speicherort einer Datei mithilfe einer URL zu beschreiben, müssen Leerzeichen maskiert werden.
Zeichen können aus mehreren Gründen unsicher sein. Das Leerzeichen ist unsicher, da signifikante Leerzeichen verschwinden und unwichtige Leerzeichen eingefügt werden können, wenn URLs transkribiert oder gesetzt oder Textverarbeitungsprogrammen unterzogen werden.
Quelle: RFC1738
Daher muss ein Leerzeichen durch ein ersetzt %20
werden. Dies macht den Dateinamen-Teil der URL weniger lesbar und die Leute meiden ihn daher an erster Stelle.