哪些字符需要在期望字符串中转义?

mca*_*dre 4 linux unix expect

我知道硬括号[]expect "..."字符串中使用时需要三个反斜杠转义,所以我expect "blah blah \\\[herp derp\\\]"用来准确地将这些字符传达给expectI/O 检查器,但还有哪些其他字符也需要转义?管道?括弧????

gle*_*man 5

这里发生了两件事:

  1. Tcl[...]用作“命令替换”语法(参见https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm规则 7)。这就像 shell 脚本中的反引号。在双引号内,执行命令替换。

  2. expect命令的默认模式匹配是“glob”模式。Glob 模式记录在此处:https : //tcl.tk/man/tcl8.6/TclCmd/string.htm#M35 方括号是 glob 模式的特殊符号。

因此,首先您需要保护双引号内的方括号以防止命令替换。然后,如果要将它们视为文字字符,则需要再次对它们进行转义。

您可以通过以下方式减少反斜杠:

  1. 使用非插值引号:在 Tcl 中{braces}不是"quotes".

  2. 选择不同的模式类型:如果这是您要匹配的文字字符串,请使用该-ex选项表示您想要“完全”匹配。

因此,你想要这个:

expect -ex {blah blah [herp derp]}
Run Code Online (Sandbox Code Playgroud)