2017-01-04 63 views
0

我已经看过期望联机帮助页和谷歌搜索它,但我还没有找到什么-r预期是。我看到在expect脚本之前,像这样使用“-r”在Expect的“expect -r PATTERN”命令中的含义是什么?

expect -r "\r\n\r\n" 

这个选项,但无法弄清它是。有谁知道我在哪里可以找到这个答案?在此先感谢

+0

你是'-r'而不是'\ r'或'-re'吗? – RomanPerekhrest

+1

请添加完整的命令。 – adiesner

+0

是的,它是r。完整的命令是'expect -r'somePattern'' – chromechris

回答

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 
} 

然后在函数调用TclTcl_GetIndexFromObj(interp, objPtr, tablePtr, msg, flags, indexPtr)解析命令选项。 Accordint到Tcl_GetIndexFromObj()manual

...如果objPtr出现匹配的字符串值是相同的一个在tablePtr字符串如果它是一个非空独特缩写对于tablePtrTCL_EXACT标志中的恰好一个字符串未指定; ...

这里Expect电话Tcl_GetIndexFromObj()flags = 0(无TCL_EXACT),所以记录-gl,在手册页-re-ex分别-glob-regexp-exact实际上。而且,由于只有一个选项-regexp,从-r开始,所以-r只是意味着与-regexp(和-re)相同。

我个人建议仍然使用记录的选项来避免混淆其他人。

+0

哇!哈哈,很多挖!太棒了,非常感谢。 – chromechris