Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >双引号与花括号

双引号与花括号

作者头像
Lauren的FPGA
发布于 2019-10-31 05:09:02
发布于 2019-10-31 05:09:02
2.4K0
举报
文章被收录于专栏:Lauren的FPGALauren的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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
注释与续行
Tcl中的注释符为井号#,但井号#的位置是有所讲究的,即它必须位于命令的第一个字符。从这个角度而言,Tcl的注释和命令处于同一层次,这意味着一个注释要占用一个命令位置。看一个简单的例子。在这个例子中,第一条注释独自占据一行并以#开始,因此该注释是合法的;第二条注释尽管和set命令在同一行,但set命令后紧随分号,表明命令结束,故该注释也是合法的;第三条注释中,#出现在set命令中间,并不是命令的第一个字符,而被当做set命令的一部分,从而造成set命令参数设置不合理。
Lauren的FPGA
2019/10/31
1K0
TCL语法_日语语法整理手写笔记
Tcl 全称是 Tool command Language。它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握。
全栈程序员站长
2022/09/20
6740
JS 单引号、双引号与反引号的区别
每一个编程语言都有引号,但作用和用法略有区别。JS 也存在单引号、双引号与反引号。
恋喵大鲤鱼
2021/01/21
9.3K0
07-2 引用
二、引用(控制扩展) 现在我们已经知道,shell 有多种方式可以进行扩展,现在我们来学习如何控制扩展。 echo this is a test echo The tota is $100.0
见贤思齊
2020/08/05
7250
Bash Shell 中单引号和双引号的区别
你会经常在 Linux 命令行中使用引号,处理文件名中的空格?你使用引号。处理特殊字符?你再次使用引号。
网络技术联盟站
2022/04/12
3.9K0
Bash Shell 中单引号和双引号的区别
Linux笔记5.展开与引用
参数展开 路径名展开 [root@senlong usr]# echo * bin etc games include lib lib64 libexec local man sbin share src tmp 为何echo不打印 * ?是因为shell把 * 展开成了另外的东西(在这种情况下,就是在当前工作目录下的文件名字) 这种通配符工作机制叫做路径名展开 [root@senlong usr]# echo l* lib lib64 libexec local 算术表达式展开 shell 允许算术表达式
章鱼喵
2018/06/27
7810
关于JS字面量及其容易忽略的12个小问题
JS这种语言一不小心就会写错。为什么前端技术专家工资那么高,可能要解决的疑难杂症最多吧。
LIYI
2019/09/02
3.1K0
关于JS字面量及其容易忽略的12个小问题
tcl三部曲(一)、替换、引用与匹配
Tcl最早被称为工具命令语言,“Tool command language”,是一种脚本语言。
根究FPGA
2020/08/13
3.9K0
tcl三部曲(一)、替换、引用与匹配
第五讲:Python数据类型之String
在Python 中,字符串是最常用的数据类型,我们可以使用引号(‘或”)来创建字符串。
Wu_Candy
2022/07/04
4950
第五讲:Python数据类型之String
第五节(信息读写基础)
前面的许多笔记中程序示例都使用了printf(),下面来详细介绍printf()函数。
冷影玺
2023/10/11
2510
第五节(信息读写基础)
如何处理Shell脚本中的特殊字符
有时,当我们编写 shell 脚本时,我们必须处理特殊字符,如空格、符号和其他非 ASCII 字符。这些字符可能无法直接由 shell 脚本和其他工具处理。因此,我们必须采取一些措施来处理这些特殊字符。
IT运维技术圈
2022/12/26
8.2K0
第八章:从 shell 眼中看世界
In this chapter we are going to look at some of the “magic” that occurs on the commandline when you press the enter key. While we will examine several interesting andcomplex features of the shell, we will do it with just one new command:
砖业洋__
2023/05/06
2510
php中的双引号与单引号的基本使用
PHP字符串变量用于存储并处理文本, 在创建字符串之后,我们就可以对它进行操作。我们可以直接在函数中使用字符串,或者把它存储在变量中
itclanCoder
2023/09/14
7160
php中的双引号与单引号的基本使用
Shell特殊字符
shell既是类Unix操作系统的命令解析器,用于解释执行用户输入的一连串命令,它类似于DOS下的command和后来Windows的cmd.exe。同时shell也是一种程序设计语言。作为命令解释型的脚本语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它预定义了各种环境变量,保留了一些关键字以及一些特殊字符的含义,并提供了许多在高级语言中才具有的控制结构,包括循环和分支判断。
恋喵大鲤鱼
2018/08/03
5.4K0
命令注入限制绕过
命令注入攻击是一种常见而危险的攻击方式,它可以使攻击者通过在目标系统中注入恶意命令来获取系统权限并执行恶意操作,为了应对命令注入攻击,开发人员们通常会采取各种限制措施,例如:输入验证、参数化查询等,然而正是在这些限制措施背后攻击者找到了一些巧妙的方法来绕过这些限制,从而成功地执行命令注入攻击,本文将重点关注命令注入限制绕过技术,探讨攻击者是如何利用漏洞和技术手段来绕过常见的命令注入防护措施的,我们将深入剖析一些常见的限制绕过技术
Al1ex
2024/03/02
6070
命令注入限制绕过
【rainbowzhou 面试27/101】基础提问--什么是模式匹配,举例说明一下?
昨天和大家聊了聊Shell方面的基础知识,当然除了基本的命令和语法外,Shell还有一些高级的用法,可以让你的代码更简洁、高效和优雅。在这篇面试问答中,我将分享一些我在Shell面试中遇到或使用过的Shell高级用法,希望对你有所启发。
rainbowzhouj
2023/05/11
5250
【rainbowzhou 面试27/101】基础提问--什么是模式匹配,举例说明一下?
一文掌握shell脚本的基本语法
欢迎大家star我的GitHub:https://github.com/SolerHo/geeks-shell,建议直接使用GitHub来查看排版,发现markdown有错位的情况。
阳光罗诺
2022/01/03
4.2K0
一文掌握shell脚本的基本语法
Java程序设计(基础)- 基本语法
标识符:给接口(interface)、变量(variables)、类(class)和方法(method)命名。
全栈程序员站长
2022/06/30
3330
Java程序设计(基础)- 基本语法
Groovy语法系列教程之字符串(三)
本系列教程介绍Groovy编程语言的语法。Groovy的语法源自Java语法,但是通过特定类型对其进行了增强,并允许进行某些简化。
DevOps持续交付
2020/03/10
7.9K0
Python入门到放弃 | 超简单 跟我学(四)
Python 诞生之初就被誉为最容易上手的编程语言。进入火热的 AI 人工智能时代后,它也逐渐取代 Java,成为编程界的头牌语言。
剑指工控
2021/11/09
8840
相关推荐
注释与续行
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档