unknown -
處理對使用不存在命令的嘗試
unknown cmdName ?
arg arg ...?
在一個指令碼嘗試呼叫一個不存在的命令的時候,Tcl
直譯器將呼叫這個命令。
unknown 的實現不是 Tcl
核心的一部分;但是在
Tcl
啟動的時候,它是一個被預設定義的庫過程。你可以覆蓋這個預設的
unknown
來改變它的功能。
如果 Tcl
直譯器遇到一個命令名而沒有為它一個定義了的命令,則
Tcl 檢查是否存在一個叫
unknown
的命令。如果沒有這個命令,則直譯器返回一個錯誤。如果
unknown
命令存在,則呼叫它並加上由被完全替換過的名字組成的引數和給最初的不存在的命令的引數。典型的,
unknown
命令做在庫目錄中查詢名字是
cmdName
的一個命令過程,把縮寫的命令名擴充套件成全長的名字,或自動的作為子程序執行未知命令等事情。在這些情況下(比如擴充套件縮寫)
unknown
將輕微的改變最初的命令,接著(重)執行它。
unknown
命令的結果被用做最初的不存在的命令的結果。
unknown
的預設實現的行為如下。它首先呼叫
auto_load
庫過程來裝載命令,接著它用最初的引數執行最初的命令。如果自動裝載失敗則
unknown 呼叫
auto_execok
來看是否有一個叫
cmd
的可執行檔案。如果有,它呼叫
Tcl
exec 命令並加上
cmd
和所有
args
作為引數。如果
cmd
不可自動執行,
unknown
檢查是否在頂層呼叫這個命令並在任何指令碼的外部。如果是這樣,則
unknown
進行兩個額外的步驟。首先它參看
cmd
是否是下列三種形式之一:
!!,
!event, 或
^old^new?
^?。如果是這樣,則
unknown 用與
csh
相同的方式對這些構造(construct)進行歷史替換。最後,
unknown 檢查
cmd
是否是一個現存的 Tcl
命令的縮寫。如果是,它擴充套件命令名並用最初的引數執行這個命令。如果上述努力都不能執行這個命令,
unknown
返回一個錯誤。如果定義了全域性變數
auto_noload
,則跳過自動裝載步驟。如果定義了全域性變數
auto_noexec,則跳過自動執行步驟。在通常的條件下,
unknown
的返回值就是最終執行的命令的返回值。
info(n),
proc(n)
error, non-existent command
寒蟬退士
2001/09/01
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh