1

私は自分のショップでルーターを使った仕事で TCL を使い始めようとしているので、これを研究しています。私がアクセスできるスクリプトを書いている技術者がいるので、彼の仕事から学ぼうとしています。

スクリプトの冒頭で次のセクションに出くわしましたが、これは理解しようとしていてほとんど進歩していません。どんな説明でも助けていただければ幸いです。

このセクションでは、プロンプトを設定し、スクリプトで後で使用するプロンプト設定を作成します。

set prompt "(%|#|\\$) $"      ;# default prompt
catch {set prompt $env(EXPECT_PROMPT)}
set spec "(,|%|\\)|\\(|;|:|\\.|\\*|\[|\]| |/|{|}|\\||\\$|\"|\'|\\\\|-)"

後で、変数 spec の値は次のように使用されます。

set cmd "show clock"
regsub -all $spec $cmd "_" cmde

だから私は本当に何が起こっているのか知りたいのですが、私の「web foo」はこれで完全に失敗しています。

ありがとう!マルク

4

1 に答える 1

2

regsub コマンドは、一連の「特殊」文字をアンダースコアに変換しています。正規表現は、次のspecように理解しやすい (そして読みやすい) 場合があります。

set spec {[][,%)(;:.* /{}|$"'\\-]}

括弧、コンマ、パーセント、括弧、セミコロン、コロン、ドット、スター、スペース、スラッシュ、括弧、パイプ、ドル、二重引用符、単一引用符、バックスラッシュ、ハイフン -- (文字クラスに括弧を入れたい場合、最初の文字として閉じ括弧を配置する必要があります)

少し外挿して、英数字以外のすべての文字をアンダースコアに変更することが目標の場合は、次のようにします

regsub -all {\W} $cmd "_" cmde

\W「非単語文字」の正規表現の短縮形です。

http://tcl.tk/man/tcl8.5/TclCmd/re_syntax.htm

プロンプト変数を設定する別の方法と、それをどのように書くか:

if {[info exists env(EXPECT_PROMPT)]} {
    set prompt $env(EXPECT_PROMPT)
} else {
    set prompt {[%#$] $}
}

Tcl を学習している場合は、Tcl チュートリアルを使用してください。

于 2012-12-14T17:27:45.803 に答える