如何连接Tcl中由大括号转义的字符串?

gav*_*koa 2 tcl expect

我在Expect脚本中编写正则表达式并希望使用([0-9] +)\ r \n作为正则表达式模式.为了防止[...]替代我用弯括号:

expect -re {([0-9]+)\r} {...}

但是{ \ }中的\ r 在括号中没有特殊含义(被视为两个字符).我试试

expect -re {([0-9]+)}\r {...}

但这需要解析错误.我试试

expect -re [concat {([0-9]+)} "\r"] {...}

但是concat在args之间增加了空间.

PS.我知道引用[ ...]引用的另一个解决方案[:

expect -re "(\[0-9]+)\r" {...}

但希望听到{...}引用风格的解决方案......

Hai*_* Vu 5

你是对的:\ r在{}中没有意义,因为你需要使用双引号,但需要转义方括号:

expect -re "(\[0-9\]+)\r" ...
Run Code Online (Sandbox Code Playgroud)

如果你想连接:

set expression {([0-9]+)}
append expression "\r"
expect -r $expression
Run Code Online (Sandbox Code Playgroud)