1

在我的脚本中,我想返回不匹配的字符串。我试过puts $expect_out(buffer)了,但它没有用,并给了我以下错误

can't read "expect_out(buffer)": no such variable
    while executing
"puts "out is $expect_out(buffer)" "

代码

expect {
     -nocase -re "$arg3" { exit 0 } 
    timeout  { puts "Does not matched, output is $expect_out(buffer)" ; exit 2 }"
}
4

1 回答 1

0

expect_out数组在匹配发生之前不存在,因此如果您之前没有在代码中匹配期望调用并且您实际上达到了超时子句,您会收到no such variable错误消息。

期待手册页

“在匹配模式(或 eof 或 full_buffer)时,任何匹配的和以前不匹配的输出都保存在变量 expect_out(buffer) 中。最多 9 个正则表达式子字符串匹配项保存在变量 expect_out(1,string) 到 expect_out(9, string). 如果在模式之前使用 -indices 标志,则 10 个字符串的开始和结束索引(以适合 lrange 的形式)存储在变量 expect_out(X,start) 和 expect_out(X,end) 中,其中X 是一个数字,对应于缓冲区中的子字符串位置。0 指的是匹配整个模式的字符串,它是为 glob 模式和正则表达式模式生成的。

您可以通过测试info exists expect_out并使用打印出数组键/值(如果存在)array names expect_out

您可以通过 自己明确设置值set expect_out(key) value,但是(据我所知)无法最初检索不匹配的字符串,log_file expectoutput.txt如果超时,则使用并读回它。

于 2012-04-18T21:27:37.117 回答