2017-01-04 62 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