Które znaki wymagają ucieczki w oczekiwanych ciągach?

2

Wiem, że ciężko wsporniki [, ]wymaga ucieczki stosowany wewnątrz potrójne backslash expect "..."strun, więc używam expect "blah blah \\\[herp derp\\\]"dokładnie przekazać te znaki do expectI / O sprawdzania, ale jakie inne znaki również wymagać ucieczce? Rura? Zdanie wtrącone? ???

Mcandre
źródło
expectużywa Tcl do swoich skryptów, więc zgaduję, że te same znaki potrzebują ucieczki, jak w zwykłym Tcl.
mtak,

Odpowiedzi:

2

Działają się tutaj 2 rzeczy:

  1. Tcl używa [...]jako składni „podstawiania poleceń” (patrz reguła 7 https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm ). To jest jak backticks w skrypcie powłoki. W obrębie podwójnych cudzysłowów wykonywane są podstawienia poleceń.

  2. Domyślnym dopasowaniem wzorca dla expectpolecenia są wzorce „glob”. Wzory globu są udokumentowane tutaj: https://tcl.tk/man/tcl8.6/TclCmd/string.htm#M35 Nawiasy kwadratowe są specjalne dla wzorów globów.

Najpierw musisz chronić nawiasy kwadratowe w podwójnych cudzysłowach, aby zapobiec zamianie poleceń. Następnie, jeśli chcesz traktować je jako dosłowne znaki, musisz uciec od nich ponownie.

Oto kilka rzeczy, które możesz zrobić, aby zmniejszyć odwrotne ukośniki:

  1. używaj cudzysłowów bez interpolacji: w Tcl {braces}nie jest "quotes".

  2. wybierz inny typ wzoru: jeśli jest to dosłowny ciąg, który chcesz dopasować, użyj -exopcji, aby powiedzieć, że chcesz „dokładne” dopasowanie.

Dlatego chcesz tego:

expect -ex {blah blah [herp derp]}
Glenn Jackman
źródło