Scroll to navigation

filename(3tcl) Tcl Built-In Commands filename(3tcl)


NAME

filename - Tcl 命令支援的檔名轉換


INTRODUCTION

所有接受檔名作為引數的 Tcl 命令和 C 過程希望檔名是依賴於當前平臺的三種形式之一。在每種平臺上,Tcl 都支援這種平臺上的標準形式的檔名。額外的,在所有平臺上,Tcl 支援一種 Unix 式的語法,提供了一種方便的方式來構造簡單的檔名。但是,打算被移植的指令碼不要假定特定形式的檔名。可移植的指令碼必須使用 file splitfile join 命令來操縱檔名(詳見file 的手冊條目)。

路徑型別 PATH TYPES

基於用來指定檔案的路徑的起點,檔名被組織成三種一般型別: 絕對,相對,相對-卷。絕對名字是完全限定的(qualified),給出的到檔案的路徑相對於一個特定的卷和在這個捲上的根目錄。相對名字是未限定的,給出的到檔案的路徑相對於當前的工作目錄。相對-卷名字是部分限定的,給出的路徑要麼相對在當前捲上的根目錄,要麼相對於在指定捲上的當前目錄。使用 file pathtype 命令來確定一個給定路徑的型別。

路徑語法 PATH SYNTAX

本地名字的規則依賴於在 Tcl 陣列元素 tcl_platform(platform) 中報告的值:

在 Apple Macintosh 系統上,Tcl 支援兩種形式的路徑名。常規 Mac 式樣的名字使用分號作為路徑分隔符。路徑可以是相對的或絕對的,並且檔名中可以包含除了分號之外的任何字元。一個前導的分號導致路徑的剩餘部分被解釋成相對當前目錄。如果一個路徑包含一個不在開始處的分號,則路徑被解釋成一個絕對路徑。在路徑中任何地方的兩個或多個分號的序列被用做構造相對路徑,這裡的 :: 參照當前目錄的父目錄,::: 參照父目錄的父目錄,以此類推。

除了 Macintosh 式樣的名字,Tcl 還支援 Unix 式名字的一個子集。如果一個路徑不包含分號,則把它按一個 Unix 路徑來解釋。使用斜槓作為路徑分隔符。檔名 . 參照當前目錄,而 .. 參照當前目錄的父目錄。但是,象 //..的一些名字沒有對映,並被作為 Macintosh 名字解釋。一般的,生成檔名的命令返回 Macintosh 式樣的名字,而接收檔名的命令接受 Macintosh 和 Unix 式樣的兩種名字。

下列例子展示不同形式的路徑名:

:
到當前資料夾(folder)的相對路徑。
到在當前資料夾中的叫 MyFile的一個檔案的相對路徑。
到在叫 MyDisk 的裝置上的一個叫 MyFile 的檔案的絕對路徑。.
:MyDir:MyFile
到在當前資料夾中的一個叫 MyDir的資料夾中的一個叫 MyFile 的檔案的相對路徑。
::MyFile
到在當前資料夾的上層資料夾中的一個叫 MyFile 的檔案的相對路徑。
:::MyFile
到在當前資料夾的上兩層資料夾中的一個叫 MyFile 的檔案的相對路徑。
/MyDisk/MyFile
在叫 MyDisk 的裝置上的一個叫 MyFile 的檔案的絕對路徑。
../MyFile
到在當前資料夾的上層資料夾中的一個叫 MyFile 的檔案的相對路徑。
在 Unix 平臺上,Tcl 使用的路徑名的組成部分由斜槓來分隔。路徑名可以是相對的或絕對的,並且檔名可以包含除斜槓之外的任何字元。檔名 ... 是特殊的並且分別參照當前目錄和當前目錄的父目錄。多個毗接的(adjacent)的斜槓被解釋為一個單一的分隔符。下列例子展示不同形式的路徑名:
/
到根目錄的絕對路徑。
/etc/passwd
到在根目錄中的 etc 目錄中的一個叫 passwd 的檔案的絕對路徑。
.
到當前目錄的相對路徑。
Relative path to the file foo in the current directory.
到在當前目錄中的一個叫 foo 的檔案的相對路徑。
../foo
到在當前目錄中的目錄 foo 目錄中的一個叫 bar 的檔案的相對路徑。
在 Microsoft Windows 平臺上,Tcl 支援相對驅動器和 UNC 式樣的名字兩者。/\ 二者都可用在兩種型別的名字中做分隔符。相對驅動器的名字由可選的驅動器指定符(specifier)和隨後的絕對或相對的路徑組成。UNC 路徑依從 \\servername\sharename\path\file 的一般形式。在兩種形式中,檔名 ... 是特殊的並且分別參照當前目錄和當前目錄的父目錄。下列例子展示不同形式的路徑名:
到在主機 Host 上的匯出點 share 的根目錄中的一個叫 file 的檔案的絕對 UNC 路徑。
到在驅動器 c 上的當前目錄中的一個叫 foo 的檔案的相對卷的路徑。
到在當前捲上的當前目錄中 foo 目錄中一個叫 bar 的檔案的絕對路徑。
到在當前捲上的當前目錄中 foo 目錄中一個叫 bar 的檔案的相對路徑。
到在當前卷的根目錄中的一個叫 foo 的檔案的相對卷的路徑。

波浪線替換 TILDE SUBSTITUTION

除了上述檔名規則之外,Tcl 還支援 csh 式樣的波浪線替換。如果一個檔名以一個波浪線開始,則按檔名的第一個元素被給定使用者的主目錄的位置所替換來解釋。如果波浪線之後立即跟隨著一個分隔符,則用 $HOME 環境變數來替換。否則在波浪線和下一個分隔符之間的的字元被接受為一個使用者名稱,它被用來檢索用於替換的使用者的主目錄。

Macintosh 和 Windows 不支援對波浪線跟隨一個使用者名稱的波浪線替換。在這些平臺上,使用波浪線並跟隨一個使用者名稱的嘗試將生成一個錯誤。有一個波浪線而沒有使用者名稱的檔名將象 Unix 一樣使用 $HOME 環境變數來替換。

移植要點 PORTABILITY ISSUES

注意所有的檔案系統都是大小寫敏感的,所以指令碼應避免依賴於在檔名中的字元大小寫的程式碼。額外的,在不同裝置上允許的字符集可能不同,所以指令碼指令碼應選擇不包含特殊字元如 <>:"/\| 的檔名。最安全的方式是隻使用由字母組成的使用者名稱。還有 Windows 3.1 只支援有不多於8個字元的根和不多於3個字元的擴充套件的檔名。

關鍵字 KEYWORDS

current directory, absolute file name, relative file name, volume-relative file name, portability

參見 SEE ALSO

file(n), glob(n)

[中文版維護人]

寒蟬退士

[中文版最新更新]

2001/08/28

《中國 Linux 論壇 man 手冊頁翻譯計劃》:

http://cmpp.linuxforum.net

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh

7.5 Tcl