martyr-deepin / deepin-terminal-gtk

DDE terminal emulator application
GNU General Public License v3.0
264 stars 57 forks source link

fix: make special password for ssh login works. #175

Closed abcfy2 closed 5 years ago

abcfy2 commented 5 years ago

fix #160

abcfy2 commented 5 years ago

修复过程:

将expect脚本中{}逃逸变量部分替换为"",因为我发现使用了{}之后没法逃逸{}本身。比如set var {v\{a\}lue}这么逃逸的话,得到的变量部分实际为v\{a\}lue,所以改用引号赋值变量,这样需要逃逸三个特殊字符"引号本身和变量引用字符$,以及逃逸符反引号\,通过正则替换掉即可

abcfy2 commented 5 years ago

那个\\是后来才加上去,想匹配\字符本身,看来这个正则经过正则引擎解析之后又变了样了,以前没加最后的\\是测试OK的,现在我改下重测下

abcfy2 commented 5 years ago

现在测一下呢?我大概知道是怎么回事了,实际这个正则字符串需要经过两次转义。一次是string本身的转义,交给正则引擎,正则引擎还需要再做一次解析。

所以要匹配\这个字符串,在正则引擎看到的字符串必须是\\,那么正则字符串必须是\\\\

BLumia commented 5 years ago

vala 可以用 """verbatim string/原始字符串

abcfy2 commented 5 years ago

哦,原来vala有类似于python的raw string的功能啊,如果改用原始字符串这种形式的话的确对正则友好,不需要考虑正则表达式本身的转义了

BLumia commented 5 years ago

是,不过感觉 vala 这个原始字符串("""string""")没 c# 的(@"string")看着方便。