简单的正则表达式在 expect 中不起作用
Simple regular expression not working in expect
我的expect
脚本,和
一样简单
#!/usr/bin/expect
set timeout 60
spawn docker run -it ubuntu:19.04
expect {
-re "root@[0-9]+:\/#"
}
send -- exit
expect eof
由于
而失败
$ expect script.expect
spawn docker run -it ubuntu:19.04
invalid command name "0-9"
while executing
"0-9"
invoked from within
"expect {
-re "root@[0-9]+:\/#"
}"
(file "script.expect" line 5)
我希望这会成功,因为它是一个有效的 Perl 正则表达式,否则会失败并显示一条解释正则表达式错误的消息。似乎 -re
正在尝试做一些其他事情而不是匹配没有任何意义的指定 re。
我尝试转义我在 re 中可以猜到的所有内容,结果没有任何变化。
我在 Ubuntu 19.04 上使用 expect 5.45.4。
Expect 是 Tcl 的扩展。 Tcl 使用方括号进行命令替换。
此外,Tcl 与 shell 相似,它允许在双引号内替换命令和变量。 Tcl 的非插值引号是大括号(类似于 shell 的单引号)。
见https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm
因此,您想将正则表达式括在大括号中:
expect -re {root@[0-9]+:/#}
我的expect
脚本,和
#!/usr/bin/expect
set timeout 60
spawn docker run -it ubuntu:19.04
expect {
-re "root@[0-9]+:\/#"
}
send -- exit
expect eof
由于
而失败$ expect script.expect
spawn docker run -it ubuntu:19.04
invalid command name "0-9"
while executing
"0-9"
invoked from within
"expect {
-re "root@[0-9]+:\/#"
}"
(file "script.expect" line 5)
我希望这会成功,因为它是一个有效的 Perl 正则表达式,否则会失败并显示一条解释正则表达式错误的消息。似乎 -re
正在尝试做一些其他事情而不是匹配没有任何意义的指定 re。
我尝试转义我在 re 中可以猜到的所有内容,结果没有任何变化。
我在 Ubuntu 19.04 上使用 expect 5.45.4。
Expect 是 Tcl 的扩展。 Tcl 使用方括号进行命令替换。
此外,Tcl 与 shell 相似,它允许在双引号内替换命令和变量。 Tcl 的非插值引号是大括号(类似于 shell 的单引号)。
见https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm
因此,您想将正则表达式括在大括号中:
expect -re {root@[0-9]+:/#}