当前位置: 首页 > news >正文

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,分别是: 

  • 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       
输出:$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解析命令的方式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

相关文章:

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 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k…...

Python小游戏25——黄金矿工

首先&#xff0c;你需要安装Pygame库。 如果你还没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; 【bash】 pip install pygame 【python】代码展示 import pygame import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width 800 screen_height 60…...

WPF中Prism框架中 IContainerExtension 和 IRegionManager的作用

在Prism框架中&#xff0c;IContainerExtension和IRegionManager扮演着重要的角色&#xff0c;具体作用如下&#xff1a; IContainerExtension IContainerExtension接口是Prism 7中引入的&#xff0c;用于抽象依赖注入容器的操作。它实现了IContainerProvider和IContainerReg…...

C++实现用户分组--学习

第一步实现&#xff1a;ETL的设计分三部分&#xff1a;数据抽取(Data Extraction)、数据的清洗转换(Data Transformation)、数据的加载(Data Loading). 构建一个数据容器类&#xff0c;其中包含转换后的MNIST手写数据。还实现了一个数据处理程序&#xff0c;该数据处理程序将提…...

鸿蒙华为商城APP案例

模拟器运行效果如下&#xff1a; 鸿蒙版APP-华为商城-演示视频...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

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

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <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文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 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代码&#xff0c;实现机器人的最优运输 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 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...