简单的正则表达式在预期中不起作用

问题描述 投票:0回答:1

我的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。

我尝试转义我可以猜测的所有内容,而结果没有变化。

我正在Ubuntu 19.04上使用Expect 5.45.4。

regex expect
1个回答
1
投票

期望是Tcl的扩展。 Tcl使用方括号代替命令。

此外,Tcl类似于shell,它允许在双引号内进行命令和变量替换。 Tcl的非插入引号是花括号(类似于外壳的单引号)。

请参见https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm

因此,您想将正则表达式括在大括号中:

expect -re {root@[0-9]+:/#}
© www.soinside.com 2019 - 2024. All rights reserved.