Простое регулярное выражение не работает ожидаемо - PullRequest
0 голосов
/ 29 сентября 2019
Сценарий

My expect, который столь же прост, как и

#!/usr/bin/expect

set timeout 60
spawn docker run -it ubuntu:19.04
expect {
  -re "root@[0-9]+:\/#"
}
send -- exit
expect eof

, вызывает сбой из-за

$ expect script.expect
spawn docker run -it ubuntu:19.04
invalid command name "0-9"
    while executing
"0-9"
    invoked from within
"expect {
  -re "root@[0-9]+:\/#"
}"
    (file "script.expect" line 5)

Я ожидаю, что это успешно, потому что это допустимое регулярное выражение Perl или ошибка ссообщение, объясняющее ошибку в регулярном выражении.Кажется, что -re пытается сделать что-то еще, кроме сопоставления с указанным re, что не имеет никакого смысла.

Я пытался избежать всего, что мог предположить в re, без изменений в результате.

Я использую ожидаемый 5.45.4 в Ubuntu 19.04.

1 Ответ

1 голос
/ 29 сентября 2019

Expect - это расширение Tcl.Tcl использует квадратные скобки для подстановки команд.

Кроме того, Tcl похож на оболочку в том, что он допускает подстановку команд и переменных в двойных кавычках.Не интерполирующие кавычки Tcl - это фигурные скобки (похожие на одинарные кавычки оболочки).

См. https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm

Итак, вы хотите заключить регулярное выражение в фигурные скобки:

expect -re {root@[0-9]+:/#}
...