我正在尝试编写一个基于Tcl的expect脚本。 (实际上,我试图在python中生成expect脚本,不,我不能使用pyexpect)
如何发送没有特殊字符的字符串(如[
)被解释为命令?
在bash shell中,我可以使用单引号来编写原始字符串。
$ echo 'hello $world'
hello $world
但是期待,我对特殊字符有很多问题。例如,括号被解释为命令。
expect1.1> send_user "[hello]"
invalid command name "hello"
while executing
"hello"
我怎样才能打印字符串" [hello]"?
编辑:只是用花括号括起一个字符串并不总是有效。
例如
expect1.4> send_user {h} ello}
不打印字符串" h} ello"。它给出了一个错误:
extra characters after close-brace
while executing
"send {h}ello}
根据文档,没有办法逃避大括号。
或者如果我想发送以*}开头的字符串怎么办? http://tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M10中的规则5会干扰并且无法逃脱*或}。
答案 0 :(得分:3)
花括号会抑制所有膨胀*:
echo {hello $world}
你也可以逃避括号:
Echo "hello \$world"
if
语句就是这样一个命令 - 即使花括号变量也会扩展。但是,没有多少命令具有此行为。 Tcl man page中记录了这一切。这是指花括号部分的链接:http://tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M10
您可能也对stackoverflow上的这个问题感兴趣:General string quoting for Tcl
请注意,大括号并不神奇 - 您仍然需要应用引用规则。例如,您不能使用不平衡的花括号等。您需要的精确引用机制将根据数据而有所不同。对于某些表示花括号的字符串,对于某些字符串表示引号,对于其他字符串,您可能需要反斜杠。对于其他人,您可能需要组合以及字符串连接。