Expect 的 "expect -r PATTERN" 命令中的“-r”是什么意思?
What does "-r" mean as in the Expect's "expect -r PATTERN" command?
我查看了 Expect 联机帮助页并用 Google 搜索了它,但我没有找到 expect 的 -r
是什么。我看到这个选项以前是这样使用的
expect -r "\r\n\r\n"
在 expect
脚本中,但无法弄清楚它的用途。有谁知道我在哪里可以找到这个答案?提前致谢
当我看到有人在使用 expect -regexp PATTERN
时,这也让我有点困惑,因为在手册页中它只提到了 expect -re PATTERN
。我试过 expect -regexp PATTERN
确实有效。
有段时间下载了expect的source code看了看才知道原因
在源码中(参见expect.c
中的函数parse_expect_args()
),expect
的选项实际上定义如下:
static char *flags[] = {
"-glob", "-regexp", "-exact", "-notransfer", "-nocase",
"-i", "-indices", "-iread", "-timestamp", "-timeout",
"-nobrace", "--", (char *)0
}
然后在函数中调用Tcl
的Tcl_GetIndexFromObj(interp, objPtr, tablePtr, msg, flags, indexPtr)
来解析命令选项。根据 Tcl_GetIndexFromObj()
的 manual:
... a match occurs if objPtr
's string value is identical to one of the strings in tablePtr
, or if it is a non-empty unique abbreviation for exactly one of the strings in tablePtr
and the TCL_EXACT
flag was not specified; ...
此处 Expect
使用 flags = 0
调用 Tcl_GetIndexFromObj()
(没有 TCL_EXACT
),因此记录的 -gl
、-re
和 -ex
在手册页中实际上分别是-glob
、-regexp
和-exact
。由于只有一个选项 -regexp
以 -r
开头,所以 -r
与 -regexp
(和 -re
)的含义相同。
我个人建议仍然使用已记录的选项以避免混淆其他人。
我查看了 Expect 联机帮助页并用 Google 搜索了它,但我没有找到 expect 的 -r
是什么。我看到这个选项以前是这样使用的
expect -r "\r\n\r\n"
在 expect
脚本中,但无法弄清楚它的用途。有谁知道我在哪里可以找到这个答案?提前致谢
当我看到有人在使用 expect -regexp PATTERN
时,这也让我有点困惑,因为在手册页中它只提到了 expect -re PATTERN
。我试过 expect -regexp PATTERN
确实有效。
有段时间下载了expect的source code看了看才知道原因
在源码中(参见expect.c
中的函数parse_expect_args()
),expect
的选项实际上定义如下:
static char *flags[] = {
"-glob", "-regexp", "-exact", "-notransfer", "-nocase",
"-i", "-indices", "-iread", "-timestamp", "-timeout",
"-nobrace", "--", (char *)0
}
然后在函数中调用Tcl
的Tcl_GetIndexFromObj(interp, objPtr, tablePtr, msg, flags, indexPtr)
来解析命令选项。根据 Tcl_GetIndexFromObj()
的 manual:
... a match occurs if
objPtr
's string value is identical to one of the strings intablePtr
, or if it is a non-empty unique abbreviation for exactly one of the strings intablePtr
and theTCL_EXACT
flag was not specified; ...
此处 Expect
使用 flags = 0
调用 Tcl_GetIndexFromObj()
(没有 TCL_EXACT
),因此记录的 -gl
、-re
和 -ex
在手册页中实际上分别是-glob
、-regexp
和-exact
。由于只有一个选项 -regexp
以 -r
开头,所以 -r
与 -regexp
(和 -re
)的含义相同。
我个人建议仍然使用已记录的选项以避免混淆其他人。