C语言PythonBash:空白(空格、水平制表符、换行符)与转义字符
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,分别是:
- (
- "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
输出:$aecho \*
输出:*echo \|
输出:|echo \&
输出:&a=test
echo \\$a
输出:\testecho \"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\n222echo -e $a
输出:
111
222echo $b
输出:
111 222echo "$b"
输出:
111
222echo $c
输出:
111 222echo "$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/136943802
5、转义换行符,或者说连接两行
如果某行代码以转义字符加换行符结尾,Bash会将该换行符删去并将其下一行拼接到上一行的后面,这是在Token解析之前进行的,因此可以用于将一个Token分成多行(Token间的换行对Token解析没有影响),如例13所示。
// 例13
e\
c\
h\
o\nihao // 注意开头的空格
输出:nihao
除了以上五种情况外,转义字符也能接其他字符,但不会有特殊作用,如例14所示。
// 例14
echo \nihao
输出:nihao
相关文章:

C语言PythonBash:空白(空格、水平制表符、换行符)与转义字符
C语言 空白 C语言中的空白(空格、水平制表符、换行符)被用于分隔Token,因此Token间可以有任意多个空白。 // 例1 printf("Hello, World!"); 例1中存在5个Token,分别是: printf("Hello, World! \n&qu…...
【Python】轻松解析JSON与XML:Python标准库的json与xml模块
轻松解析JSON与XML:Python标准库的json与xml模块 在现代数据处理与交换中,JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是最常用的两种数据格式。它们广泛应用于API数据传输、配置…...

物联网对商业领域的影响
互联网彻底改变了通信方式,并跨越了因地理障碍造成的人与人之间的鸿沟。然而,物联网(IoT)的引入通过使设备能够连接到互联网,改变了设备的功能。想象一下,你的闹钟连接到互联网,并且能够用你的声…...

第16章 SELECT 底层执行原理
一、SELECT查询的完整结构 1.1 方式一(SQL 92语法) SELECT ..., ..., ... FROM ..., ..., ... WHERE 多表的连接条件 AND 不包含组函数的过滤条件 GROUP BY ..., ... HAVING 包含组函数的过滤条件 ORDER BY ... ASC/DESC LIMIT ..., ... 1.2 方式二&a…...
python查询日志,并组装sql,修复缺失的数据
前言 由于mysql链接超时波动,导致数据缺失,需要根据日志填补数据 流程 获取确实数据的订单列表 搜索日志,获取请求日志 根据请求日志拼装sql 打印sql供修复数据 代码 因为我们日志打印的有问题,所以这里用字符串截取获取入…...

RecyclerView进阶知识讲解
在 Android 开发中,RecyclerView 是一种高效的列表和网格布局控件,用于显示大规模数据。尽管基本使用方法简单,但深入理解并掌握其高级进阶用法能大幅提升用户体验和应用性能。下面,我将从布局管理、动画和手势、自定义缓存、优化…...

C语言 函数
时间:2024.11.10-11.11 一、学习内容 1、什么是函数 函数:程序中独立的功能。将反复书写的代码,又不确定什么时候回用到的代码打包起来。 2、函数的基本格式 函数的定义格式(写在main函数外) void 函数名() { 函数…...

windows中docker安装redis和redisinsight记录
创建一个Redis运行容器,命令如下 docker run -it -d --name redis -p 6379:6379 redis --bind 0.0.0.0 --protected-mode no -d 代表Redis容器后台运行 --name redis 给创建好的容器起名叫redis -p 6379:6379 将容器的6379端口映射到宿主机的6379端口,注…...

itextpdf打印A5的问题
使用A5打印的时候,再生成pdf是没有问题的。下面做了一个测试,在打印机中,使用A5的纸张横向放入,因为是家用打印机,A5与A4是同一个口,因此只能这么放。 使用itextpdf生成pdf,在浏览器中预览pdf是…...

qt QUndoView详解
1、概述 QUndoView 是 Qt 框架中用于显示 QUndoStack(撤销堆栈)内容的视图类。它通常与 QUndoStack 一起使用,为用户提供了一个可视化的界面来查看和操作撤销/重做历史。QUndoView 可以显示堆栈中的每个命令,并允许用户通过界面进…...
python+智谱AI-实现钉钉消息自动回复
python智谱AI-实现钉钉消息自动回复 实现了电脑窗口切换,截图识别未读消息,与语言模型交互后,将答案带入到钉钉窗口中。偷个懒,直接贴代码了,后续不断完善注释,如果遇到读不懂的地方,欢迎交流。…...

Kafka-Eagle的配置——kafka可视化界面
通过百度网盘分享的文件:kafka-eagle-bin-2.0.8.tar.gz 链接:https://pan.baidu.com/s/1H3YONkL97uXbLTPMZHrfdg?pwdsltu 提取码:sltu 一、界面展示 二、软件配置 1、关闭kafka集群 kf.sh stop 2、将该软件上传到/opt/modules下 cd /opt…...

【命令操作】Linux上带宽流量监控nethogs命令详解 _ 统信 _ 麒麟 _ 方德
原文链接:【命令操作】Linux上带宽流量监控nethogs命令详解 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天带来一篇关于Linux上nethogs命令详解的文章。nethogs是一款非常实用的网络流量监控工具,帮助用户实时查看系统中每个进程的网…...

【入门篇】数字统计——多语言版
题目跳转:数字统计 题目解析: 这道题目要求统计在给定范围 [L, R] 内所有整数中数字 2 出现的次数。例如,在范围 [2, 22] 中,数字 2 分别在数 2、12、20、21、22 中出现的次数,最终出现了6次。 题目的输入为两个正…...
探索那些现代C++语法糖
本文来聊聊现代C的一些语法糖。 1.Auto auto x 10; // 推导为 int auto y 3.14; // 推导为 double2.范围-based for 循环 std::vector<int> v {1, 2, 3, 4, 5}; for (auto val : v) {std::cout << val << " "; }3.nullptr int* ptr nullpt…...
【LeetCode】【算法】33. 搜索旋转排序数组
LeetCode 33. 搜索旋转排序数组 题目描述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k…...
Python小游戏25——黄金矿工
首先,你需要安装Pygame库。 如果你还没有安装,可以使用以下命令进行安装: 【bash】 pip install pygame 【python】代码展示 import pygame import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width 800 screen_height 60…...
WPF中Prism框架中 IContainerExtension 和 IRegionManager的作用
在Prism框架中,IContainerExtension和IRegionManager扮演着重要的角色,具体作用如下: IContainerExtension IContainerExtension接口是Prism 7中引入的,用于抽象依赖注入容器的操作。它实现了IContainerProvider和IContainerReg…...
C++实现用户分组--学习
第一步实现:ETL的设计分三部分:数据抽取(Data Extraction)、数据的清洗转换(Data Transformation)、数据的加载(Data Loading). 构建一个数据容器类,其中包含转换后的MNIST手写数据。还实现了一个数据处理程序,该数据处理程序将提…...

鸿蒙华为商城APP案例
模拟器运行效果如下: 鸿蒙版APP-华为商城-演示视频...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...