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-华为商城-演示视频...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
