"-r"在Expect的"expect -r PATTERN"命令中的含义是什么?

chr*_*ris 0 linux options expect

我查看了Expect手册页并用Google搜索了它,但我还没有找到-r期望的内容.我之前看过这个选项

expect -r "\r\n\r\n"
Run Code Online (Sandbox Code Playgroud)

expect脚本中,但无法弄清楚它是什么.有谁知道我在哪里可以找到这个答案?提前致谢

pyn*_*exj 5

当我看到有人使用时,这也让我感到困惑,expect -regexp PATTERN因为在手册页中它只提到了expect -re PATTERN.我试过expect -regexp PATTERN,它确实有效.

有一段时间我下载了期望的源代码并看了看原因.

在源代码(见函数parse_expect_args()expect.c),则expect的选择实际上是定义如下:

static char *flags[] = {
  "-glob", "-regexp",  "-exact", "-notransfer", "-nocase",
  "-i",    "-indices", "-iread", "-timestamp",  "-timeout",
  "-nobrace", "--", (char *)0
}
Run Code Online (Sandbox Code Playgroud)

然后在函数中调用Tcl's Tcl_GetIndexFromObj(interp, objPtr, tablePtr, msg, flags, indexPtr)来解析命令选项.Accordint Tcl_GetIndexFromObj()手册:

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

这里Expect呼吁Tcl_GetIndexFromObj()flags = 0(没有TCL_EXACT),所以记录-gl,-re-ex在手册页实际上-glob,-regexp-exact分别.因为只有一个选项-regexp,-r所以-r只是意味着与-regexp(和-re)相同.

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