双引号与花括号

在Tcl中,可通过双引号“”和花括号{}将多个单词包括分隔符(例如:换行符和空格)和置换符(例如:美元符号$、方括号[]和反斜杠)等特殊字符组成一组,作为一个参数处理;区别在于双引号内的置换正常进行,而花括号内的置换有可能会被阻止,如下图所示:

变量s被赋值为Hello World,注意这里通过双引号避免了空格被当作分隔符处理。第一个puts命令使用了双引号,可以看到所有置换都随之发生;第二个puts命令使用了花括号,相应的内部置换均被阻止;

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

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

 

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

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

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

 

结论:

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

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值