我一直在研究这个问题,因为我正在尝试使用TCL与我店里的路由器合作。我们有一个技术人员正在编写我可以访问的脚本,所以我试图从他的工作中学习。
我在脚本的开头遇到了以下部分,我一直在努力理解这些部分并且几乎没有取得进展。我希望你可以提供任何解释。
该部分设置提示,并创建稍后在脚本中使用的提示设置。
set prompt "(%|#|\\$) $" ;# default prompt
catch {set prompt $env(EXPECT_PROMPT)}
set spec "(,|%|\\)|\\(|;|:|\\.|\\*|\[|\]| |/|{|}|\\||\\$|\"|\'|\\\\|-)"
稍后,变量spec的值使用如下:
set cmd "show clock"
regsub -all $spec $cmd "_" cmde
所以我真的很想知道发生了什么,但我的'网络foo'让我彻底失败了。
谢谢! 马克
答案 0 :(得分: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 Tutorial。