Directory

Linux 如何處理多個連續的路徑分隔符(/home////username///file)?

  • October 5, 2020

我正在研究一個將文件位置傳遞給 scp 子程序的 python 腳本。這一切都很好,但我處於這樣一種情況,我可能最終將路徑與文件名連接起來,這樣路徑中有一個雙 ’ /。我知道 bash 不在乎您是否有多個文件分隔符,但我想知道究竟是如何糾正的。是 bash 去除了額外/的 s 還是真的無關緊要?

我問是因為它會為我節省幾行程式碼來檢查額外/的 s 在連接時。我知道這沒什麼大不了的,但我也很好奇。我有一個 bash 腳本,其中包含該行cd //usr(而不是cd /usr),這似乎暗示/在路徑中使用多個 s可能很重要

允許使用多個斜線,並且等效於單個斜線。根據Single Unix 規範(版本 4)基本定義 §3.271 路徑名:“多個連續的斜杠被認為與一個斜杠相同。”

有一個例外:如果路徑名以兩個連續的斜杠字元開頭,則可以以實現定義的方式解釋前導斜杠字元之後的第一個組件。(參考:基本定義§4.13 路徑名解析)。Linux 本身不這樣做,儘管某些應用程序可能會這樣做,而其他 unix-ish 系統會這樣做(例如 Cygwin)。

路徑名末尾的尾隨/強制路徑名引用目錄。在 ( POSIX 1003.1-2001 (Single Unix v4) 基本定義 §4.11 路徑名解析中,尾部/等同於尾部/.。POSIX 1003.1-2008 (Single Unix v4) 基本定義 §4.13刪除了使其等效於/., 的要求處理不存在的目錄(例如mkdir foo/需要工作,而mkdir foo/.不會 - 請參閱更改的基本原理)。

對於作用於目錄條目的程序,如果foo是指向目錄的符號連結,那麼傳遞foo/是一種使程序作用於目錄而不是符號連結的方法。

¹請注意,這僅適用於路徑名解析,即在訪問文件時。文件名操作可能會有所不同。例如basenamedirname忽略尾隨斜杠。

引用自:https://unix.stackexchange.com/questions/1910