Dies verwirrte mich auch ein wenig, als ich sah, jemand verwendete expect -regexp PATTERN
, weil in der man-Seite erwähnt es nur expect -re PATTERN
. Ich habe versucht expect -regexp PATTERN
und es funktioniert wirklich.
Irgendwann habe ich erwartet source code heruntergeladen und habe einen Blick und fand den Grund. s Tcl_GetIndexFromObj(interp, objPtr, tablePtr, msg, flags, indexPtr)
zu Befehlsoptionen zu analysieren:
Im Quellcode (siehe die Funktion parse_expect_args()
in expect.c
), die expect
'es nennt Tcl
static char *flags[] = {
"-glob", "-regexp", "-exact", "-notransfer", "-nocase",
"-i", "-indices", "-iread", "-timestamp", "-timeout",
"-nobrace", "--", (char *)0
}
dann in der Funktion s Optionen definiert sind tatsächlich wie folgt'. Accordint zu Tcl_GetIndexFromObj()
's manual:
... tritt ein Spiel, wenn objPtr
' s String-Wert identisch mit einem der ist die Saiten in tablePtr
, oder wenn es eine nicht leer eindeutige Abkürzung ist für genau eine der Zeichenfolgen in tablePtr
und die TCL_EXACT
Flag wurde nicht angegeben; ...
Hier Expect
Anrufe Tcl_GetIndexFromObj()
mit flags = 0
(kein TCL_EXACT
) so dokumentierten -gl
, -re
und -ex
in der Manpage sind eigentlich -glob
, -regexp
und -exact
sind. Und da gibt es nur eine Option -regexp
beginnend mit -r
, also -r
bedeutet einfach das gleiche wie -regexp
(und -re
).
Ich persönlich empfehle die dokumentierten Optionen immer noch verwendet werden, um zu vermeiden, andere Menschen zu verwirren.
bist du es, dass es '-r' ist, aber nicht' \ r' oder '-re'? – RomanPerekhrest
Bitte fügen Sie den vollständigen Befehl hinzu. – adiesner
Ja, es ist r. Der vollständige Befehl ist 'expect -r' somePattern '' – chromechris