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

时间:2017-01-04 20:57:06

标签: linux expect options

我查看了 Expect 联机帮助页并用Google搜索了它,但我还没有找到-r的预期结果。我之前看过这个选项

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

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

1 个答案:

答案 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)相同。

我个人建议仍然使用记录的选项以避免让其他人感到困惑。