## Tcl9.0.3/Tk9.0.3 Documentation > Tcl Commands > unknown

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

### NAME

unknown — 実在しない命令を使う試みを処理する Handle attempts to use non-existent commands

### 構文 SYNOPSIS

unknown cmdName ?arg arg ...?

### 説明 DESCRIPTION

この命令は記述譜が実在しない命令を起動しようとすると何時でもTcl 解釈実行機能によって起動される｡ unknown の省略時設定の実装は､Tcl が解釈実行機能を初期化する時に定義される外部函数群手続函数である｡省略時設定の unknown は､その機能を変更する為に上書きすることが可能であり､又､ namespace unknown 命令を使って個別の名前空間の為の新しい処理を登録することが可能である｡註意すべきは安全な解釈実行機能の中には unknown の省略時設定の実装はないことである｡ This command is invoked by the Tcl interpreter whenever a script tries to invoke a command that does not exist. The default implementation of unknown is a library procedure defined when Tcl initializes an interpreter. You can override the default unknown to change its functionality, or you can register a new handler for individual namespaces using the namespace unknown command. Note that there is no default implementation of unknown in a safe interpreter.

もしTcl 解釈実行機能が定義された命令にない命令に遭遇すると(現在の名前空間であれ､大域名前空間であれ)､Tcl は現在の名前空間の為の未知処理子の存在を調べる｡省略時設定ではこの処理子は ::unknown で指名される命令である｡その様な命令がない場合､解釈実行機能は不都合を返す｡もし unknown 命令が実在すると(又は現在の名前空間の為に新しい処理子が登録されていると)､完全に置換された名前と実在しない元の命令の為の引数とから構成される引数と共に起動される｡ unknown 命令は典型的にはことを行うに､ cmdName という名前の命令手続函数の為の外部函数群ディレクトリーを通して捜す､又は､短縮された名前を元の長さに伸張する､又は仔手続函数として未知命令を自動的に実行する､の様に進める｡ある場合には(譬えば短縮名を伸張する)､ unknown は元の名前を幾らか変更し､そして(再-)実行する｡ unknown 命令の結果は元の非実在命令の結果として使われる｡ If the Tcl interpreter encounters a command name for which there is not a defined command (in either the current namespace, or the global namespace), then Tcl checks for the existence of an unknown handler for the current namespace. By default, this handler is a command named ::unknown. If there is no such command, then the interpreter returns an error. If the unknown command exists (or a new handler has been registered for the current namespace), then it is invoked with arguments consisting of the fully-substituted name and arguments for the original non-existent command. The unknown command typically does things like searching through library directories for a command procedure with the name cmdName, or expanding abbreviated command names to full-length, or automatically executing unknown commands as sub-processes. In some cases (such as expanding abbreviations) unknown will change the original command slightly and then (re-)execute it. The result of the unknown command is used as the result for the original non-existent command.

unknown 命令の省略時設定の実装の振舞いは次の通り｡最初に命令を組込むために 外部函数群手続函数 auto_load を呼出す｡もし成功すると､元の引数と共に元の命令を実行する｡もし auto_load が失敗し且つ､Tcl が対話的に実行されると､ unknown は auto_execok を呼出し､ cmd と謂ふ名の実行可能なファイルがあるかを捜す｡もしあれば､ cmd と全ての args を引数として Tcl の exec 命令を起動する｡もし､ cmd が自動実行できないと､ unknown は命令が最頂水準に於いて又､如何なる記述譜の外側で起動できないか調べる｡もし､そうなら unknown は追加的な二つの段階を踏む｡第１は､ cmd が次の三つの形式の一つを有するか: !! か !event か ^old^new?^? か｡もし､そうであれば､ unknown は､この様な構造の為にすると同じ方法で､履歴置換を実行する｡最後に unknown は､ cmd が既存のTcl 命令に対し重複しない短縮形になっているかを調べる｡もしそうであれば､命令の名前を伸張し元の引数と共に命令を実行する｡もし､上の努力の何れもが命令の実行をすることができない場合､ unknown は不都合を返す｡もし､大域変数 auto_noload が定義されていると自動組込み段階は飛越しされる｡もし､大域変数 auto_noexec が定義されていると自動実行の段階は飛越しされる｡通常の環境のもとでは､ unknown からの返り値は､最終的に実行された命令の返り値である｡ The default implementation of unknown behaves as follows. It first calls the auto_load library procedure to load the command. If this succeeds, then it executes the original command with its original arguments. If the auto-load fails and Tcl is run interactively then unknown calls auto_execok to see if there is an executable file by the name cmd. If so, it invokes the Tcl exec command with cmd and all the args as arguments. If cmd cannot be auto-executed, unknown checks to see if the command was invoked at top-level and outside of any script. If so, then unknown takes two additional steps. First, it sees if cmd has one of the following three forms: !!, !event, or ^old^new?^?. If so, then unknown carries out history substitution in the same way that csh would for these constructs. Finally, unknown checks to see if cmd is a unique abbreviation for an existing Tcl command. If so, it expands the command name and executes the command with the original arguments. If none of the above efforts has been able to execute the command, unknown generates an error return. If the global variable auto_noload is defined, then the auto-load step is skipped. If the global variable auto_noexec is defined then the auto-exec step is skipped. Under normal circumstances the return value from unknown is the return value from the command that was eventually executed.

### 用例 EXAMPLE

unknown 命令を､命令が見付からないという事実を最初に日誌に記録することを除いて標準の振舞いを有する様に準備する: Arrange for the unknown command to have its standard behavior except for first logging the fact that a command was not found:

    # 元のものを保存し､手繰れるようにする
    # Save the original one so we can chain to it
    rename unknown _original_unknown

    # 新しい実装を提供する
    # Provide our own implementation
    proc unknown args {
        puts stderr "WARNING: unknown command: $args"
        uplevel 1 [list _original_unknown {*}$args]
    }

### SEE ALSO

info, proc, interp, library, namespace

### KEYWORDS

error, non-existent command, unknown
Copyright © 1993 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.