Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527267
  • 博文数量: 118
  • 博客积分: 2575
  • 博客等级: 大尉
  • 技术积分: 1263
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 09:37
文章分类

全部博文(118)

文章存档

2017年(11)

2016年(8)

2015年(1)

2014年(9)

2013年(7)

2012年(38)

2011年(14)

2010年(18)

2009年(12)

分类: LINUX

2016-04-26 10:29:20

在expect的处理中,关于什么时候转义,转几层,还有什么时候是list,什么时候是array,有时候,也很唬人,让你容易搞错。

关键在于TCL的设定,一切都是字符串。所以理解也要从字符串的理解开始,交给expect的进行处理的参数,首先由TCL解析器进行分析,这时候,会进行第一次的转义处理,包括$符号进行变量替换。而expect如果再对字符串进行特殊处理,如使用在pattern中,作为glob或者regex识别,则进行第二次的字符串转义处理。所以如果在在expect匹配$符号,你得写

  1. expect -re "\\\$"
这样expect拿到的是"\$",而正则表达式引擎则翻译成"$"字符。

tcl还有一个特别,变量替换只有在$后面跑着变量(至少看起来像是变量的东西)才进行变量替换,所以有不混淆的情况下,也可以写成"\\$"。

对于list和array,应当记住,tcl没有list或者array这些类型。tcl有的只是字符串,字符串,字符串……(这可不是重要的事情说三遍,仅仅是房子大有回音)。当我们说到list或者array的时候,是函数把字符串解释成list了。所以tcl引擎解析之后,交给函数的argument还是字符串,而函数内部通过分隔符,把字符串解释成list,再进行list的操作。同理对于array也是这样的。

阅读(1674) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~