我查看了 Expect 联机帮助页并用Google搜索了它,但我还没有找到-r
的预期结果。我之前看过这个选项
expect -r "\r\n\r\n"
在expect
脚本中,但无法弄清楚它的用途。有谁知道我在哪里可以找到这个答案?提前致谢
答案 0 :(得分:5)
当我看到有人使用expect -regexp PATTERN
时,这也让我感到困惑,因为在手册页中它只提到expect -re PATTERN
。我试过了expect -regexp PATTERN
,它确实有效。
有些时候,我下载了期待source code并查看了原因。
在源代码中(请参阅parse_expect_args()
中的函数expect.c
),expect
的选项实际上定义如下:
static char *flags[] = {
"-glob", "-regexp", "-exact", "-notransfer", "-nocase",
"-i", "-indices", "-iread", "-timestamp", "-timeout",
"-nobrace", "--", (char *)0
}
然后在函数中调用Tcl
' s Tcl_GetIndexFromObj(interp, objPtr, tablePtr, msg, flags, indexPtr)
来解析命令选项。按照Tcl_GetIndexFromObj()
manual {/ p>的约定
...如果
objPtr
的字符串值与tablePtr
,或字符串相同,则会发生匹配>如果tablePtr
中的一个字符串是非空唯一缩写,则未指定TCL_EXACT
标志; ...
此处Expect
使用Tcl_GetIndexFromObj()
(无flags = 0
)调用TCL_EXACT
,因此记录在案的-gl
,-re
和-ex
手册页实际上分别是-glob
,-regexp
和-exact
。由于-regexp
只有一个选项-r
,因此-r
只表示与-regexp
(和-re
)相同。
我个人建议仍然使用记录的选项以避免让其他人感到困惑。