简单的正则表达式在 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]+:/#}