C语言PythonBash:空白(空格、水平制表符、换行符)与转义字符

news2024/11/23 12:38:34

C语言

空白

        C语言中的空白(空格、水平制表符、换行符)被用于分隔Token,因此Token间可以有任意多个空白。

// 例1
printf("Hello, World!");

       例1中存在5个Token,分别是:

  • printf
  • (
  • "Hello, World! \n"
  • )

        将例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!"
 )
    ;

        除了以上两种情况外,转义字符不能接其他字符。


Python

空白

        Python中的空白(空格、水平制表符)被用于分隔Token,因此Token间可以有任意多个空白,而换行符(其实它在Python中被认为是一个Token)的功能根据其所在的位置的不同而异:

        1、当换行符在末尾时(且前面没有转义字符),用于表示一条简单语句的结束。

        2、当换行符在圆括号、方括号、花括号内时,用于分隔Token。

// 例3
print("Hello, World!")

        例3中存在5个Token,分别是: 

  • print
  • (
  • "Hello, World! \n"
  • )
  • 换行符

        将例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!"
 )

        除了以上两种情况外,转义字符不能接其他字符。 

Bash

空白

        Bash中的空白(空格、水平制表符)被用于分隔Token(即命令、选项和参数),因此Token间可以有任意多个空白,而换行符的功能根据其所在的位置的不同而异:

        1、当换行符在末尾时(且前面没有转义字符、没有被引号包括),用于表示一条简单语句的结束。

        2、当被引号包括时,换行符只表示其本意即换行。

// 例6
echo 111 222 333

        例6中存在5个Token,分别是: 

  • echo
  • 111
  • 222
  • 333
  • 换行符

转义字符

        在Bash中,转义字符是一种特殊的字符序列,用于表示序列有特殊含义,转义字符以反斜杠(\)开头,一般紧接一个特定字符,某些情况下可能会接多个字符,它的用法有: 

1、转义空白

        默认情况下,空白被用于分隔Token,但如果空白前有转义字符,则空白会被认为是Token的一部分,如例7所示。

// 例7
echo 111 222 333        // 四个Token
输出:111 222 333    
 
echo 111\ \ 222\ \ 333  // 两个Token
输出:111  222  333

2、转义特殊字符

        转义字符可以转义一些特殊字符,让它们保留字面值,如例8所示。

// 例8
a=test
echo \$a       
输出:$a

echo \*
输出:*

echo \|
输出:|

echo \&
输出:&

a=test
echo \\$a       
输出:\test

echo \"111\"
输出:"111"

echo 111 \#111
输出:111 #111

3、禁用别名替换

        如果一条命令的第一个Token(即命令名)被转义(任意一个字符)了,则其不会进行别名替换,如例9所示。

// 例9
alias echo='echo 111'
echo 222
输出:111 222
\echo 222
输出:222
ec\ho 222
输出:222

4、在引号中的转义行为

双引号

        在双引号中,转义字符只针对特定特殊字符有效($、`、"和自身\),如例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
a='111\n222'
b="111\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解析命令的方式icon-default.png?t=O83Ahttps://chenzhang.blog.csdn.net/article/details/136943802

5、转义换行符,或者说连接两行

        如果某行代码以转义字符加换行符结尾,Bash会将该换行符删去并将其下一行拼接到上一行的后面,这是在Token解析之前进行的,因此可以用于将一个Token分成多行(Token间的换行对Token解析没有影响),如例13所示。

// 例13
e\
c\
h\
o\
 nihao  // 注意开头的空格
输出:nihao

        除了以上五种情况外,转义字符也能接其他字符,但不会有特殊作用,如例14所示。

// 例14
echo \nihao
输出:nihao

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基础(十四)——BASH

BASH 1.BASH定义2.shell的种类3.bash的功能3.1 命令记录功能3.2 命令补全功能3.3 命令别名设置3.4 工作控制、 前景背景控制3.5 程序化脚本: ( shell scripts)3.6 万用字符 4.bash的内置命令5.shell的变量功能5.1 变量的取用5.2 新建变量5.3 …

【重学 MySQL】八十二、深入探索 CASE 语句的应用

【重学 MySQL】八十二、深入探索 CASE 语句的应用 CASE语句的两种形式CASE语句的应用场景数据分类动态排序条件计算在 SELECT 子句中使用在 WHERE子句中使用在 ORDER BY 子句中使用 注意事项 在MySQL中,CASE 语句提供了一种强大的方式来实现条件分支逻辑&#xff0c…

由播客转向个人定制的音频频道(1)平台搭建

项目的背景 最近开始听喜马拉雅播客的内容,但是发现许多不方便的地方。 休息的时候收听喜马拉雅,但是还需要不断地选择喜马拉雅的内容,比较麻烦,而且黑灯操作反而伤眼睛。 喜马拉雅为代表的播客平台都是VOD 形式的&#xff0…

7+纯生信,单细胞识别细胞marker+100种机器学习组合建模,机器学习组合建模取代单独lasso回归势在必行!

影响因子:7.3 研究概述: 皮肤黑色素瘤(SKCM)是所有皮肤恶性肿瘤中最具侵袭性的类型。本研究从GEO数据库下载单细胞RNA测序(scRNA-seq)数据集,根据原始研究中定义的细胞标记重新注释各种免疫细胞…

uniapp解析蓝牙设备响应数据bug

本文章为了解决《uniapp 与蓝牙设备收发指令详细步骤(完整项目版)》中第十步的Array 解析成 number函数bug 1、原代码说明 function array16_to_number(arrayValue) {const newArray arrayValue.filter(item > String(item) ! 00 || String(item) ! 0)const _number16 ne…

【递归回溯与搜索算法篇】算法的镜花水月:在无尽的自我倒影中,递归步步生花

文章目录 递归回溯搜索专题(一):递归前言第一章:递归基础及应用1.1 汉诺塔问题(easy)解法(递归)C 代码实现时间复杂度和空间复杂度易错点提示 1.2 合并两个有序链表(easy…

大数据开发面试宝典

312个问题,问题涵盖广、从自我介绍到大厂实战、19大主题,一网打尽、真正提高面试成功率 一、Linux 1. 说⼀下linux的常⽤命令? 说一些高级命令即可 systemctl 设置系统参数 如:systemctl stop firewalld关闭防火墙 tail / hea…

链表归并与并集相关算法题|两递增归并为递减到原位|b表归并到a表|两递减归并到新链表(C)

两递增归并为递减到原位 假设有两个按元素递增次序排列的线性表,均以单链表形式存储。将这两个单链表归并为一个按元素递减次序排列的单链表,并要求利用原来两个单链表的节点存放归并后的单链表 算法思想 因为两链表已按元素值递增次序排列&#xff0…

【RabbitMQ】06-消费者的可靠性

1. 消费者确认机制 没有ack,mq就会一直保留消息。 spring:rabbitmq:listener:simple:acknowledge-mode: auto # 自动ack2. 失败重试机制 当消费者出现异常后,消息会不断requeue(重入队)到队列,再重新发送给消费者。…

【陕西】《陕西省省级政务信息化项目投资编制指南(建设类)(试行)》-省市费用标准解读系列07

《陕西省省级政务信息化项目投资编制指南(建设类)(试行)》规定了建设类项目的费用投资测算方法与计价标准,明确指出建设类项目费用包括项目建设费和项目建设其他费(了解更多可直接关注咨询我们)…

VB6.0桌面小程序(桌面音乐播放器)

干货源码 Imports System.IO Imports System.Security.Cryptography Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Button1.Text “上一曲” Button4.Text “播放” Button3.Text “下一曲” Button2.Text “顺序播…

docker安装jdk8

1、拉取镜像 docker pull openjdk:82、运行镜像 docker run -d --restartalways --network portainer_network -it --name jdk8 openjdk:8命令 作用 docker run 创建并启动一个容器 –name jdk8 将容器取名为jdk8 -d 设置后台运行 –restartalways 随容器启动 –network port…

【人工智能】Transformers之Pipeline(二十三):文档视觉问答(document-question-answering)

​​​​​​​ 目录 一、引言 二、文档问答(document-question-answering) 2.1 概述 2.2 impira/layoutlm-document-qa 2.2.1 LayoutLM v1 2.2.2 LayoutLM v2 2.2.3 LayoutXLM 2.2.4 LayoutLM v3 2.3 pipeline参数 2.3.1 pipeline对象实例化…

微服务day06

MQ入门 同步处理业务: 异步处理: 将任务处理后交给MQ来进行分发处理。 MQ的相关知识 同步调用 同步调用的小结 异步调用 MQ技术选型 RabbitMQ 安装部署 其中包含几个概念: publisher:生产者,也就是发送消息的一方 …

[CKS] K8S RuntimeClass SetUp

最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于RuntimeClass创建和挂载的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS…

Halcon基于laws纹理特征的SVM分类

与基于区域特征的 SVM 分类不同,针对图像特征的 SVM 分类的算子不需要直接提取 特征,下面介绍基于 Laws 纹理特征的 SVM 分类。 纹理在计算机视觉领域的图像分割、模式识别等方面都有着重要的意义和广泛的应 用。纹理是指由于物体表面的物理属性不同所…

初始Python篇(6)—— 字符串

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 字符串的常见操作 格式化字符串 占位符 f-string 字符串的 format 方法 字符串的编码与解码 与数据验证相关的方法 …

基于Spring Boot+Vue的养老院管理系统【原创】

一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框架Vue.js;UI库:ElementUI; 开发工具&…

Maven 中央仓库地址 mvnrepository.com

下载一些 jar 包驱动,不需用去官网下了,直接去 Maven 中央仓库,高效、简单 Maven 中央仓库地址 https://mvnrepository.com/open-source 我们下期见,拜拜!

2024 年将 Postman 文档导出为 HTML 或 Markdown

2024 年将 Postman 文档导出为 HTML 或 Markdown