前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >双引号与花括号

双引号与花括号

作者头像
Lauren的FPGA
发布2019-10-31 13:09:02
2.2K0
发布2019-10-31 13:09:02
举报
文章被收录于专栏:Lauren的FPGA

在Tcl中,可通过双引号“”和花括号{}将多个单词包括分隔符(例如:换行符和空格)和置换符(例如:美元符号$、方括号[]和反斜杠)等特殊字符组成一组,作为一个参数处理。这实际上也是一种置换操作。区别在于双引号内的置换正常进行,而花括号内的置换有可能会被阻止,如下图所示。变量s被赋值为Hello World,注意这里通过双引号避免了空格被当作分隔符处理。第一个puts命令使用了双引号,可以看到所有置换都随之发生;第二个puts命令使用了花括号,相应的内部置换均被阻止。

双引号另一常用情形是出现在嵌套命令中,且嵌套的命令是外层命令参数的一部分。例如上图中的第一条puts命令,内部嵌套了string length命令,而string length命令的返回值是puts命令参数的一部分。如果仅仅是命令嵌套,就不需要双引号,如下图所示。

给变量赋值时,也可以通过花括号使特殊字符被当作普通字符处理。如下图所示。在这个例子中,花括号阻止了$置换。如果将花括号替换为双引号则会报错。

如果在一个脚本中同时使用双引号和花括号会是什么结果呢?看下面这个例子。给变量b赋值时使用了反斜杠置换,给变量c赋值时使用了双引号加花括号,其中双引号在最外层,给变量d赋值时使用了花括号加双引号,其中花括号在最外层,对比下来可以得出这样的结论:在同时使用双引号和花括号时,最外层的做主。

对于花括号,如前文所述“花括号内的置换有可能会被阻止”,这是因为花括号的功能稍微复杂一些,但总的来说遵循两个原则:第一个原则是如果花括号是用做置换操作,则其内部的置换操作会被阻止;第二个原则是如果花括号用做界限符,如过程定义时用做过程体的边界、if语句、循环语句(for和while)、switch语句等的边界以及数学表达式中时,其内部的置换操作不会被阻止。

如果需要双引号或花括号作为普通字符出现在字符串中时,可通过反斜杠\置换,或者通过双引号和花括号的嵌套使用实现特定功能,如下图所示。

结论:

-双引号实现参数分组,不阻止置换;

-花括号实现参数分组,阻止内部置换;

-同时使用双引号和花括号实现参数分组时,是否置换由最外层符号决定

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lauren的FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档