Яким персонажам потрібно втекти у рядках очікування?


2

Я знаю , що жорсткі дужки [, ]вимагають потрійних зворотного косі рис випливають при використанні всередині expect "..."рядків, тому я використовую , expect "blah blah \\\[herp derp\\\]"щоб точно передати ці символи в expectI / O перевірки, але що інші персонажі також вимагає екранування? Труба? Круглі скобки? ???


expectвикористовує Tcl для своїх сценаріїв, тому я б здогадався, що ті самі символи потребують втечі, як у звичайному Tcl.
mtak

Відповіді:


2

Тут відбуваються 2 речі:

  1. Tcl використовує [...]як синтаксис "заміни команди" (див. Https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm правило 7). Це як зворотні посилання в сценарії оболонки. У межах подвійних лапок виконується підміна команд.

  2. За замовчуванням узгодження шаблону для expectкоманди - це "glob" шаблони. Шаблони глобусу задокументовані тут: https://tcl.tk/man/tcl8.6/TclCmd/string.htm#M35 Квадратні дужки спеціальні для глобальних моделей.

Отже, спочатку вам потрібно захистити квадратні дужки в межах подвійних лапок, щоб запобігти замінам команд. Тоді, якщо ви хочете ставитися до них як до буквальних символів, вам потрібно знову їх уникнути.

Ось кілька речей, які ви можете зробити, щоб зменшити кількість нахилів:

  1. використовувати неінтерполюючі лапки: у Tcl це {braces}не так "quotes".

  2. виберіть інший тип шаблону: якщо це буквальний рядок, який ви хочете зіставити, скористайтеся -exопцією, щоб сказати, що хочете "точного" відповідності.

Таким чином, ви хочете цього:

expect -ex {blah blah [herp derp]}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.