Welche Zeichen müssen in erwarteten Zeichenfolgen umgangen werden?

861
mcandre

Ich weiß, dass harte Klammern [, ]erfordern entweichende triple Backslash wenn innerhalb des Hauses expect "..."Strings, so dass ich expect "blah blah \\\[herp derp\\\]"genau diese Zeichen der Transport expectI / O - Checker, aber was andere Charaktere auch zu entkommen erfordern? Rohr? Klammern? ???

1
"Expect" verwendet Tcl für seine Skripte, daher würde ich vermuten, dass die gleichen Charaktere entkommen müssen, wie in normalen Tcl. mtak vor 6 Jahren 0

1 Antwort auf die Frage

1
glenn jackman

Hier sind zwei Dinge los:

  1. Tcl verwendet [...]als "Befehlssubstitution" -Syntax (Siehe https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm Regel 7). Es ist wie Backticks in einem Shell-Skript. In Anführungszeichen werden Befehlssubstitutionen ausgeführt.

  2. Das Standardmuster für den expectBefehl ist "Glob" -Muster . Glob Patterns sind hier dokumentiert: https://tcl.tk/man/tcl8.6/TclCmd/string.htm#M35 Eckige Klammern sind speziell für Glob Patterns.

Daher müssen Sie zuerst die eckigen Klammern in Anführungszeichen schützen, um das Ersetzen von Befehlen zu verhindern. Wenn Sie sie dann als buchstäbliche Zeichen behandeln möchten, müssen Sie sie erneut entweichen.

Hier sind ein paar Dinge, die Sie tun können, um die Backslashes zu reduzieren:

  1. Verwenden Sie nicht interpolierende Anführungszeichen: in Tcl nicht "quotes".

  2. Wählen Sie einen anderen Mustertyp: Wenn es sich um eine Literalzeichenfolge handelt, die Sie abgleichen möchten, verwenden Sie die -exOption, um anzugeben, dass Sie eine "exakte" Übereinstimmung haben möchten.

Also willst du das:

expect -ex