
我認識的一個人今天對我們這些傾向於不在檔案名稱中使用空格的人表示憤怒,例如NamingThingsLikeThis.txt
——儘管大多數現代作業系統都支援檔案名稱中的空格。
在那兒技術原因看到檔案名稱沒有(適當的)空格仍然很常見?如果是這樣,避免或不鼓勵使用檔案名稱中的空格的技術原因是什麼?
我能想到的最明顯的原因以及我通常避免使用它的最明顯原因是處理此類文件時命令行上需要額外的引號。還有其他重要的技術原因嗎?
答案1
在命令列和腳本的許多上下文中,檔案名稱中的空格字元可能是一個眾所周知的痛苦,您必須小心確保它們被正確轉義,因此不要看起來像您所執行的命令的分隔符號跑步。
即使您確定文件/目錄/其他內容永遠不會在這種情況下使用,但不要將它們放在那裡會更安全。
那,舊習慣很難改掉。
答案2
除了有關命令列和舊習慣的其他答案之外,還有許多網路協定在處理包含空格的檔案名稱時需要特別小心。
(如果您曾經嘗試從網站下載“Product List.pdf”,並最終得到一個名為“Product”的文件,那麼您就會被這個問題困擾,因為另一端的程式設計師不知道或無法不知道http Content -Disposition 標頭的引用規則。
答案3
很多原因都是歷史原因。這並不意味著它們在今天沒有意義。
可移植性問題
命名檔案時,您可能還必須考慮其他(檔案)系統將如何處理該檔案名稱。檔案名稱中的字元對於您的系統可能沒問題,但對於另一個系統可能會出現問題。
因此,只要您有一絲希望能夠從舊系統輕鬆存取該文件的可能性,您就會只選擇安全的特點。這可能包括啟動到您保留的舊復原系統,或擔心最近的 Windows 版本仍然以某種方式基於 MS-DOS。
長度
文件系統可能會限製文件的長度。在 MS-DOS 僅限於使用的時代,這種情況更為嚴重。8.3 檔案名。因此,省略空格使您可以在名稱中添加更有意義的字元。
其他幾個檔案系統也對其檔案名稱長度定義了嚴格的限制。維基百科有表格關於檔案系統比較的文章對於那些想要詳細資訊的人。
保留字元
MS-DOS 也將空格字元定義為保留字元。這是因為空格字元被用於FAT 中的填充。此外,MS-DOS 並未在 shell 中提供轉義系統。
命令列解釋
我知道的大多數命令列都使用空格字元作為參數分隔符。當忽略正確轉義檔案名稱時,可能會產生可怕的後果,因為檔案名稱的一部分可能被解釋為您要呼叫的應用程式的參數。
考慮之間的區別
rm foo bar
和
rm "foo bar"
上面連結的維基百科文章甚至指出了由於缺少正確轉義命令而導致的歧義:
可以透過先禁止在檔案名稱和目錄名稱中嵌入空格(例如,用下劃線「_」取代它們)來防止歧義,或者如果命令列解釋器和程式支援將這些參數作為參數,透過在引號字元之間插入嵌入空格的名稱或在空格前使用轉義字元(通常是反斜線('\'))來實現。例如
Long path/Long program name Parameter one Parameter two ...
不明確(「程式名稱」是程式名稱的一部分,還是兩個參數?);然而
Long_path/Long_program_name Parameter_one Parameter_two ..., LongPath/LongProgramName ParameterOne ParameterTwo ..., "Long path/Long program name" "Parameter one" "Parameter two" ...
和Long\路徑/Long\程式\名稱參數\一個參數\兩個...
並不含糊。
統一資源定位符 (URL)
當嘗試使用 URL 描述檔案的位置時,需要轉義空格。
由於多種原因,角色可能不安全。空格字元是不安全的,因為當 URL 被轉錄、排版或接受文字處理程式處理時,重要的空格可能會消失,而無關緊要的空格可能會被引入。
來源:RFC1738
因此,必須用 a 代替空格%20
。這使得 URL 的檔案名稱部分可讀性較差,因此人們首先會避免使用它。
答案4
有時,在處理命令列時,或使用較舊的作業系統時,或編寫將在不同作業系統上編譯的程式時,或當...有很多原因可能會出現問題時,空格可能會出現問題,但我不這樣做我真的不覺得將文件寫成這樣很麻煩:文件無空格.txt或者文件無空白.txt。我更喜歡 dask,因為在處理例如帶有下劃線的字體時,下劃線有時會變得不可見。
但大多數情況下,這是老年習慣的問題。我覺得還不夠親放棄的理由。
附加註釋,可能不相關,但我還是把它放在這裡。用空格命名檔案的人通常不會太在意這一點。那些不太了解為什麼在檔案名稱中避免使用它們的人。
而且,我們都同意,沒有什麼比名為“親愛的先生或女士,我寫這封信是為了通知您 yo.doc”的文件更糟糕的了。
不僅僅是空格 - 文件長度也很重要,恕我直言,它不應該超過 30 個字元。對於錄製 CD、DVD 等需要在舊作業系統下以及 Win 和 *nix 平台之間讀取的檔案來說,內部有空格的長檔案名稱也是一種福音。