Viele Gründe sind historisch. Das bedeutet nicht, dass sie heute keinen Sinn ergeben.
Probleme bei der Portabilität
Bei der Benennung einer Datei müssen Sie möglicherweise auch berücksichtigen, wie andere (Dateisysteme) diesen Dateinamen behandeln. Ein Zeichen in einem Dateinamen ist für Ihr System möglicherweise in Ordnung, für ein anderes System kann es jedoch ein Problem sein.
Solange die geringste Möglichkeit bestand, dass Sie von einem älteren System aus problemlos auf die Datei zugreifen können, wählen Sie nur einen sicheren Charakter. Dies kann das Booten in einem alten Wiederherstellungssystem, das Sie aufbewahrt haben, oder die Angst, dass aktuelle Windows-Versionen immer noch auf MS-DOS basieren, umfassen.
Länge
Ein Dateisystem kann die Länge einer Datei begrenzen. Dies war noch schwerwiegender während der Tage, als MS-DOS auf 8.3-Dateinamen beschränkt war . Wenn Sie also Leerzeichen weglassen, können Sie dem Namen aussagekräftigere Zeichen hinzufügen.
In einigen anderen Dateisystemen wurden auch strenge Grenzen für die Dateinamenlänge definiert. Wikipedia hat im Artikel eine Tabelle über den Vergleich von Dateisystemen für diejenigen, die die Details wünschen.
Reservierte Charaktere
MS-DOS definierte auch das Leerzeichen als reserviertes Zeichen. Dies ist darauf zurückzuführen, dass das Leerzeichen in der FAT für das Auffüllen verwendet wurde . Darüber hinaus stellte MS-DOS in der Shell kein abgehendes System zur Verfügung.
Befehlszeileninterpretation
In den meisten mir bekannten Befehlszeilen wird das Leerzeichen als Parameterbegrenzer verwendet . Wenn Sie versäumen, einen Dateinamen ordnungsgemäß zu schützen, kann dies schwerwiegende Folgen haben, da Teile des Dateinamens als Parameter für die Anwendung interpretiert werden können, die Sie aufrufen wollten.
Betrachten Sie den Unterschied zwischen
rm foo bar
und
rm "foo bar"
Der oben verlinkte WikiPedia-Artikel weist sogar auf die Mehrdeutigkeit hin, die durch das Fehlen eines Befehls hervorgerufen wird:
Mehrdeutigkeit kann entweder verhindert werden, indem eingebettete Leerzeichen in Datei- und Verzeichnisnamen zunächst verboten werden (z. B. durch Unterstriche '_') 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 einschließen oder ein Escape-Zeichen vor dem Leerzeichen verwenden, normalerweise ein 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 \ Pfad / Long \ Programm \ Name Parameter \ ein Parameter \ zwei ...
sind nicht mehrdeutig.
URL-Adressen (Uniform Resource Locators)
Wenn Sie versuchen, den Speicherort einer Datei mithilfe einer URL zu beschreiben, müssen Leerzeichen mit Escapezeichen versehen werden.
Zeichen können aus verschiedenen Gründen unsicher sein. Das Leerzeichen ist nicht sicher, da signifikante Leerzeichen verschwinden können und unbedeutende Leerzeichen eingefügt werden können, wenn URLs transkribiert oder gesetzt oder Textverarbeitungsprogrammen behandelt werden.
Quelle: RFC1738
Ein Leerzeichen muss daher durch ein ersetzt %20
werden. Dadurch wird der Dateiname weniger gut lesbar als der Dateiname und daher wird dies von den Benutzern überhaupt vermieden.