Это также немного смутило меня, когда я увидел, что кто-то использовал expect -regexp PATTERN
, потому что на странице руководства он упоминает только expect -re PATTERN
. Я пробовал expect -regexp PATTERN
, и он действительно работает.
В какой-то момент я загрузил ожидаемый source code и посмотрел и выяснил причину.
В исходном коде (см функцию parse_expect_args()
в expect.c
), то expect
«опции s фактически определены следующим образом:
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)
разобрать параметры командной строки. Accordint к Tcl_GetIndexFromObj()
«s manual:
... совпадение происходит, если objPtr
» строковое значение s является идентичен одному из строки в tablePtr
, или если это непустое уникальное сокращение для одной из строк в tablePtr
и TCL_EXACT
флаг не указан; ...
Здесь Expect
звонки Tcl_GetIndexFromObj()
с flags = 0
(не TCL_EXACT
) так документированной -gl
, -re
и -ex
на странице человека, на самом деле -glob
, -regexp
и -exact
соответственно. И так как есть только один вариант -regexp
, начинающийся с -r
, так -r
просто означает то же, что и -regexp
(и -re
).
Лично я рекомендую документированные параметры, которые все еще используются, чтобы не путать других людей.
Ты что, это '-r', но не' \ r' или '-re'? – RomanPerekhrest
Пожалуйста, добавьте полную команду. – adiesner
Да, это r. Полная команда: «ожидать -r» somePattern »' – chromechris