与转义字符)
C语言空白C语言中的空白空格、水平制表符、换行符可以用于分隔TokenToken间可以有任意多个空白。// 例1 printf(Hello, World!);例1中存在5个Token分别是printf(Hello, World! );将例1写成例2的形式也是可以的虽然它比较丑陋。// 例2 printf ( Hello, World! ) ;转义字符在C语言中转义字符是一种特殊的字符序列用于表示序列有特殊含义转义字符以反斜杠(\)开头一般紧接一个特定字符某些情况下可能会接多达三个字符它的用法有1、在字符串常量或字符常量中表示一些特殊字符\n换行符\t水平制表符\r回车符\b退格符\a响铃符\f换页符\v垂直制表符\\反斜杠\单引号\双引号\?问号\0空字符\x**十六进制表示法\***八进制表示法2、转义换行符或者说连接两行如果某行代码以转义字符加换行符结尾C预处理器会将该换行符删去并将其下一行拼接到上一行的后面这是在Token解析之前进行的因此可以用于将一个Token分成多行Token间的换行对Token解析没有影响如例3所示。// 例2 prin\ tf ( Hello, \ World! ) ;除了以上两种情况外转义字符如果接其他字符会出现警告“warning: unknown escape sequence”且\会被无视。Python空白Python中的空白空格和水平制表符可以用于分隔Token或缩进Token间可以有任意多个空白而换行符其实它在Python中本身就是一个Token的功能根据其所在的位置的不同而异1、当换行符在末尾时且前面没有转义字符用于表示一条简单语句的结束。2、当换行符在圆括号、方括号、花括号内时用于分隔Token。// 例3 print(Hello, World!)例3中存在5个Token分别是print(Hello, World! )换行符将例3写成例4的形式也是可以的虽然它比较丑陋。// 例4 print ( Hello, World! )转义字符在Python中转义字符是一种特殊的字符序列用于表示序列有特殊含义转义字符以反斜杠(\)开头一般紧接一个特定字符某些情况下可能会接多个字符它的用法有1、在字符串常或字符常量中表示一些特殊字符\n换行符\t水平制表符\r回车符\b退格符\a响铃符\f换页符\v垂直制表符\\反斜杠\单引号\双引号\0空字符\x**十六进制表示法\***八进制表示法\N{name}以Unicode数据库中字符名表示\u****16位的Unicode字符\U********32位的Unicode字符如果字符串前有r或R则表示创建原始字符串忽略\的转义功能。2、转义换行符或者说连接两行如果某行代码以转义字符加换行符结尾Python会将该换行符删去并将其下一行拼接到上一行的后面这是在Token解析后进行的因此不能用于将一个Token分成多行除字符串Token外如例5所示。// 例5 printf ( Hello, \ World! )除了以上两种情况外转义字符如果接其他字符会出现警告“DeprecationWarning: invalid escape sequence”且\会被视为反斜杠本身。关于Python中换行符词法分析的更详细内容可以参考下面的博客。Python词法分析行结构与显式、隐式行拼接https://chenzhang.blog.csdn.net/article/details/134351156?spm1011.2415.3001.5331Bash空白Bash中的空格可以用于分隔Token即命令、选项和参数Token间可以有任意多个空白而换行符的功能根据其所在的位置的不同而异1、当换行符在末尾时且前面没有转义字符、没有被引号包括用于表示一条简单语句的结束。2、当被引号包括时换行符只表示其本意即换行。// 例6 echo 111 222 333例6中存在5个Token分别是echo111222333换行符转义字符在Bash中转义字符是一种特殊的字符序列用于表示序列有特殊含义转义字符以反斜杠(\)开头一般紧接一个特定字符某些情况下可能会接多个字符它的用法有1、转义空白默认情况下空白被用于分隔Token但如果空白前有转义字符则空白会被认为是Token的一部分如例7所示。// 例7 echo 111 222 333 // 四个Token 输出111 222 333 echo 111\ \ 222\ \ 333 // 两个Token 输出111 222 3332、转义特殊字符转义字符可以转义一些特殊字符让它们保留字面值如例8所示。// 例8 atest echo \$a 输出$a echo \* 输出* echo \| 输出| echo \ 输出 atest echo \\$a 输出\test echo \111\ 输出111 echo 111 \#111 输出111 #1113、禁用别名替换如果一条命令的第一个Token即命令名被转义任意一个字符了则其不会进行别名替换如例9所示。// 例9 alias echoecho 111 echo 222 输出111 222 \echo 222 输出222 ec\ho 222 输出2224、在引号中的转义行为双引号在双引号中转义字符只针对特定特殊字符有效$、、和自身\如例10所示。// 例10 echo Cost: \$100, she said \Hello!\, uses \command\, shows \\, \common character. 输出Cost: $100, she said Hello!, uses command, shows \, common character.单引号转义字符在单引号中失去转义的能力实际上所有字符都会被当作字面量如例11所示。// 例11 echo 1111\ 输出1111\在单引号的特殊语法中表示特殊字符当使用$.....语法时支持ANSI-C风格的转义字符。\n换行符\t水平制表符\r回车符\b退格符\a响铃符\f换页符\v垂直制表符\\反斜杠\单引号\双引号\?问号\x**十六进制表示法\***八进制表示法\u****16位的Unicode字符\U********32位的Unicode字符下面以\n作为例子说明了这一语法。// 例12 a111\n222 b111\n222 c$111\n222 echo $a 输出111\n222 echo -e $a 输出 111 222 echo $b 输出 111 222 echo $b 输出 111 222 echo $c 输出 111 222 echo $c 输出 111 222如果不使用$.....语法\n被认为是一个字面量所以直接使用echo输出时可以看到\n如果使用echo -e则表示对输出结果进行分析将其中的转义字符进行替换。如果使用$.....语法\n会被替换为换行符但由于变量替换后会进行Token重解析(word splitting)换行符会被认为用来分隔Token只有将其包围在双引号中才能阻止Token重解析并成功输出换行符有关Token重解析的进一步内容见下面的博客。Linux执行命令的命令eval与Bash解析命令的方式https://chenzhang.blog.csdn.net/article/details/1369438025、转义换行符或者说连接两行如果某行代码以转义字符加换行符结尾Bash会将该换行符删去并将其下一行拼接到上一行的后面这是在Token解析之前进行的因此可以用于将一个Token分成多行Token间的换行对Token解析没有影响如例13所示。// 例13 e\ c\ h\ o\ nihao // 注意开头的空格 输出nihao除了以上五种情况外转义字符也能接其他字符但不会有特殊作用如例14所示。// 例14 echo \nihao 输出nihaoTcl