How can I assign a variable using $expect_out in TCL/EXPECT?

user707549 picture user707549 · Jun 15, 2012 · Viewed 28.7k times · Source

If I want to match DEF_23 using the following regexp:

expect {
    -re "DEF_\[0-9]*"
    set result $expect_out(1,string)
}

why does it say no such element in array? How does $expect_out work, and how can I capture the DEF using a regexp and assign it to the variable result?

Answer

glenn jackman picture glenn jackman · Jun 15, 2012

You're looking for expect_out(0,string) -- the array element 1,string would be populated if you had capturing parentheses in your regular expression.

The expect manpage documents the use of expect_out in the documentation of the expect command:

Upon matching a pattern (or eof or full_buffer), any matching and previously unmatched output is saved in the variable expect_out(buffer). Up to 9 regexp substring matches are saved in the variables expect_out(1,string) through expect_out(9,string). If the -indices flag is used before a pattern, the starting and ending indices (in a form suitable for lrange) of the 10 strings are stored in the variables expect_out(X,start) and expect_out(X,end) where X is a digit, corresponds to the substring position in the buffer. 0 refers to strings which matched the entire pattern and is generated for glob patterns as well as regexp patterns.

There is an illustrative example in the manpage.