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-华为商城-演示视频...
Nginx基于反向代理的负载均衡
一、引言:从单点到集群,流量分发的艺术当你的应用用户量从几百飙升到几万,单台服务器很快就会成为性能瓶颈,甚至面临宕机风险。此时,最直接有效的解决方案就是横向扩展——部署多台服务器组成集群。但新问题随之而来&a…...
Codeforces Round 1058
【实况】Codeforces Round 1058 (Div. 2)(rk3194;perf1423;solve3) https://www.bilibili.com/video/BV1Tv4GzwE5r/ 【赛时3/7】Codeforces Round 1058(Div.2)上1000了记录一下 https://www.bilibili.com/video/BV1BC4kzMEoa/ Codeforces Round 1058 (Di…...
2026亲测:专业降AI率平台选这款就对了
2026 年降 AIGC 工具已从“基础语义改写”进化为多维度智能优化系统,核心评测指标涵盖 AI 生成痕迹识别精准度、专业领域术语匹配度、文本格式完整性、长篇内容逻辑一致性、降重效果稳定性以及高校检测平台兼容性。本次测评涵盖 8 款主流工具,测试场景覆…...
2026年一键生成论文工具实测精选:5款神器从构思到提交全流程护航
写论文的焦虑,是每个科研人和学生都无法回避的日常。选题无从下手,文献检索耗时费力,格式排版反复调整,查重降重更是让人抓耳挠腮。到了2026年,AI工具早已不再只是“敲字机器”,而是进化成了能陪你从构思到…...
5大AI音频处理插件:用OpenVINO为Audacity注入本地智能处理能力
5大AI音频处理插件:用OpenVINO为Audacity注入本地智能处理能力 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_mirrors/op/openvino-plugins-ai-audaci…...
Kubernetes云原生数据库部署方案:构建高可用数据库集群
Kubernetes云原生数据库部署方案:构建高可用数据库集群 一、云原生数据库概述 云原生数据库是为云环境设计的数据库系统,具备弹性伸缩、高可用性和自动化运维能力。在Kubernetes上部署数据库需要考虑持久化存储、高可用、备份恢复等关键因素。 1.1 数…...
《元创力》纪实录·桥段静默纪元:当叙事成为被审计的风险资产
X54先生叙事前的话:叙事模式:X54先生提供参考角度(可以不选)审查机构事先不对事实审查给了拍摄权和公映权,舆论压力出现,又要倒查,是从一个错误走向另一个错误,这会导致文艺创作者因…...
在OpenClaw中配置Taotoken实现多模型Agent工作流
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在OpenClaw中配置Taotoken实现多模型Agent工作流 OpenClaw是一个流行的开源Agent框架,它允许开发者构建和编排基于大语…...
看长视频懒得逐字记?2026这3款AI工具,一键转文字还能出总结
做内容创作和自媒体两年,我日常最频繁的工作,就是拆解各类长视频素材。不管是学习行业课程、拆解对标账号的干货视频,还是整理线上讲座、培训回放,都需要把视频里的口述内容变成文字笔记和总结概要。以前真的太煎熬了,…...
2026怎样提升自己的能力胜任产品经理岗位:从“功能执行者”到“增长操盘手”的蜕变指南
2026年的产品经理岗位,正在经历一场前所未有的能力重塑。过去,画原型、写PRD、跟项目进度就能成为一名合格的产品经理;如今,企业需要的是能用数据驱动决策、用AI赋能产品、用商业思维规划方向的复合型人才。在这一转型浪潮中&…...
