Linux 如何處理多個連續的路徑分隔符(/home////username///file)?
我正在研究一個將文件位置傳遞給 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/
是一種使程序作用於目錄而不是符號連結的方法。¹請注意,這僅適用於路徑名解析,即在訪問文件時。文件名操作可能會有所不同。例如
basename
並dirname
忽略尾隨斜杠。