shell printf详解
默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
1. printf命令语法组成:
printg format-string [arguments]
第一部分为格式化字符串,该字符串最好用引号括起来
第二部分为参数列表,例如字符串或变量值的列表,该列表需与第一个参数格式相对应.
1.1. format参数
| 参数 | 含义 | 举例 |
| %b | 打印相关内容并解释其中反斜杠"\"的特殊字符 | printf "|%b|\n" "a\tb" ---> |a b| |
| %c | 输出一个字符 | printf "|%c|\n" abc ---> |a| |
| %q | 以shell引用的格式打印相关内容,使其可以在标准输入中重用 | |
| %d | 以带符号十进制的格式打印相关内容 | printf "%d\n" 20 ---> 20 |
| %i | 与%d相同 | printf "%i\n" 20 ---> 20 |
| %o | 以无符号八进制格式打印相关内容 | printf "%o\n" 20 ---> 24 |
| %u | :以无符号十进制格式打印相关内容 | printf "%u\n" 20 ---> 20 |
| %x | 以无符号小写十六进制打印相关内容 | printf "%x\n" 20 ---> 14 |
| %X | 以无符号大写十六进制打印相关内容 | printf "%X\n" 20 ---> 14 |
| %f | 以浮点数的格式解析并打印相关内容 | printf "|%f|\n" 2.2 ---> |2.200000| |
| %e | 以用科学记数法(e 记数法)表示的浮点数 | printf "|%e|\n" 2.2 ---> |2.200000e+00| |
| %E | 与%e相同,只是字母用大写 | printf "|%E|\n" 2.2 ---> |2.200000E+00| |
| %g | 选用e或f中较短的一种形式 | printf "|%g|\n" 2.2 ---> |2.2| |
| %G | 以%f或者%e格式打印相关内容 | printf "|%G|\n" 2.2 ---> |2.2| |
| %s | 以字符串的格式打印相关内容 | printf "|%s|\n" "a\tb" ---> |a\tb| |
| %n | 指定打印字符的个数 | printf "|%4s|\n" "abc" ---> | abc| |
| %% | %字符 | printf "|%d%%|\n" 100 ---> |100%| |
1.2. printf标志字符
| printf标志字符 | 含义 | 举例 |
| - | 将字段里已格式化的值向左对齐 | printf "|%5d|\n" 1 ===> | 1| 对比 printf "|%-5d|\n" 1 ===》 |1 | |
| 空格 | 在正值前置一个空格,在负值前置一个负号 | printf "|%d|\n" 20 ===》 |20| 对比 printf "|% d|\n" 20 ===》| 20| printf "|%d|\n" -20 ===》|-20| 对比 printf "|% d|\n" -20 ===》|-20| |
| + | 总是在数值之前放置一个正号或负号,即便是正值也是 | printf "%+d\n" 20 ===》 +20 对比 printf "%d\n" 20 ===》20 printf "%+d\n" -20 ===》 -20 对比 printf "%d\n" -20 ===》-20 |
| # | 用于8进制%o时,会使字符前面多个0 用于16进制%x,%X时,会使字符前面多个0X 用于%e,%E与%f,总是在结果中有一个小数点; %g与%G为没有结尾的零. | printf "%o\n" 20 ===》 24 对比 printf "%#o\n" 20 ===》 024 printf "%x\n" 20 ===》 14 对比 printf "%#x\n" 20 ===》 0x14 printf "%g\n" 1.123 ===》1.123 对比 printf "%#g\n" 1.123 ===》 1.12300 |
| 0 | 以零填补输出,而非空白.这仅发生在字段宽度大于转换后的情况. | printf "|%5d|\n" 1 ===》 | 1| 对比 printf "|%05d|\n" 1 ===》|00001| |
1.3. format转义符
转义序列只在格式字符串中会被特别对待,也就是说,出现在参数字符串里的专利序列不会被解释:
使用命令:printf "%s\n" "abc\ndef"
输出结果:abc\ndef
| 转义符 | 含义 | 举例 |
| \" | 打印"符号 | printf "|%s\"|\n" "abc" ---> |abc"| |
| \NNN | 用八进制的值表示一个ASCII字符 | printf "|\141|\n" ---> |a| |
| \\ | 打印\符号 | printf "|%s\\|\n" "abc" ---> |abc\| |
| \a | 发出警告声 | |
| \b | 向前删除一个字符 | printf "|%s\b|\n" "abc" ---> |ab| |
| \f | 换页符,在某些实现中会清屏,有些会换行 | |
| \n | 换行符 | |
| \r | 不换行,光标在行首 | |
| \t | 制表符 | printf "|%s\t|\n" abc ---> |abc | |
| \v | 垂直制表符 | |
| \xHH | 用十六进制的值表示一个ASCII字符 | printf "|\x61|\n" ---> |a| |
1.4. 精度的含义
| 精度的含义 | ||
| 转换 | 精度含义 | 举例 |
| %d,%i,%o,%u,%x,%X | 要打印的最小位数. 当值的位数少于此数字时, 会在前面补零.默认精度为1 | printf "|%5d|\n" 1000 ==》 | 1000| #没有点的时候,d前面的数字5表示宽度,字符长度不足5的,右对齐,不足用空格补齐 #有点的时候,d前面的数字表示宽度 |
| %e,%E | 要打印的最小位数. 当值的位数少于此数字时, 会在小数点后面补零,默认为精度为6. 精度为0则表示不显示小数点右边的位数 | printf "|%.5e|\n" 2214.123456 ===》|2.21412e+03| #精度5,长度够,不补0 printf "|%20e|\n" 222 ===> | 2.220000e+02| #没有点的时候,20代表占位宽带,精度保持默认值6,右对齐,不足用空格补齐 printf "|%.0e|\n" 222 ===》 |2e+02| #精度为0,不显示小数点右边的位数 ------------------------------------------ printf "%e\n" 1.123456654321 ===》1.123457e+00 #没有.的时候,无论e前面有没有数字,小数点后面都只保留6位,而且取最后一位近似值 ------------------------------------------ |
| %f | 小数点右边的位数 | printf "|%10f|\n" 1.123456654321 ===》 | 1.123457| printf "|%.10f|\n" 1.123456654321 ===》|1.1234566543| #有点的时候,f前面的数字就是精度了,此时为10个精度 printf "|%10.5f|\n" 1.123456654321 ===》 | 1.12346| #%10.5f 表示10个占位宽度,5个精度,不足用空格补齐 |
| %g,%G | 有效位数的最大数目 | printf "|%10g|\n" 221.123456789123 ===》 | 221.123| #没有点的时候,g前面的数字占位宽带,有效位数保持默认值6,不足用空格补齐 #有点的时候,g前面的数字有效位数,而且取最后一位近似值 |
| %s | 要打印字符的最大数目 | printf "|%10s|\n" 123456789ABCD ===》 |123456789ABCD| printf "|%20s|\n" 123456789ABCD ===》| 123456789ABCD| #没有点的时候,s前面的数字表示最小宽度,长度超过宽度值,会完全显示, printf "|%.10s|\n" 123456789ABCD ===》 |123456789A| printf "|%.10s|\n" 123456 ===》 |123456| #有点的时候,s前面的数字10表示最大宽度,最多显示10个字符 printf "|%5.1s|\n" shell ===> | s| ]# printf "|%5.4s|\n" shell ===> | shel| #%5.1s表示,最少5个占位符,.1表示打印前1个字符,打印出的字符串长度小于占位符个数的,用空格补齐 |
2. 案例:
# format-string为双引号
printf "%d %s\n" 1 "abc" ---> 1 abc# 单引号与双引号效果一样
printf '%d %s\n' 1 "abc" ---> 1 abc# 没有引号也可以输出,但是不识别\n
printf %s abcdef ----》abcdef
printf %s\n abc ----》abcn #没有引号,\n被不识别为换行符# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
]# printf %s abc def ---> abcdef
]# printf "%s\n" abc def
abc
def
]# printf "%s %s %s\n" a b c d e f g h i j
a b c
d e f
g h i
j# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
]# printf "%s and %d \n" and 0 ]# printf "|%-20s|%15s|%10.2f|\n" "Shan" "zhang" 35
|Shan | zhang| 35.00|
分析:
%-20s表示一个左对齐、宽度为20个字符字符串格式,不足20个字符,右侧补充相应数量的空格符。
%15s表示一个右对齐、宽度为15个字符字符串格式,不足15个字符,左侧补充相应数量的空格符。
%10.2f表示右对齐、10个字符长度的浮点数,其中一个是小数点,小数点后面保留两位。printf "|%x|%#x|\n" 15 15
|f|0xf|
分析:如果#标志和%x,%X搭配使用,在输出十六进制数字时,前面会加0x或者0X前缀.相关文章:
shell printf详解
默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。 1. printf命令语法组成: printg format-string [arguments] 第一部分为格式化字符串,该字符串最好用引号括起来 第二部分为参数列表,例如字符串或变量值的列表,该列表需…...
【数据分析】用Python做事件抽取任务-快速上手方案
目录 方法一:使用OmniEvent库安装OmniEvent使用OmniEvent进行事件抽取OmniEvent优点缺点 方法二:使用大模型使用GPT网页版进行事件抽取事件类型列表 大模型优点缺点 总结 在自然语言处理(NLP)领域,事件抽取是一项关键任…...
B端系统门门清之:HRM,人力资源系统,公司发展的源动力。
人才是公司发展的源动力,针对公司复杂人力的管理就是HRM系统的核心功能,本文就带领大家详细认识一下HRM系统,分别从什么是HRM系统,作用、功能模块、颜值提升四个方面来阐述。欢迎大家点赞评论收藏转发。 一、什么是HRM系统 HRM系…...
tplink安防监控raw文件转码合成mp4的方法
Tplink(深圳普联)专业的网络设备生产商,属于安防监控市场的后来者。Tplink的安防产品恢复了很多,其嵌入式文件系统也一直迭代更新。今天要说的案例比较特殊,其不仅仅要求恢复,还要求能解析出音频并且要求画面和声音实现“同步”。…...
每天一个数据分析题(三百八十三)- 聚类
关于忽略自相关可以带来什么问题描述错误的是? A. 均方误差可能严重低估误差项的方差 B. 可能导致高估检验统计量t值,致使本不显著的变量变得显著了 C. 参数估计值的最小方差无偏性不再成立 D. 参数估计值的最小方差无偏性仍成立 数据分析认证考试介…...
构建下一代数据解决方案:SingleStore、MinIO 和现代 Datalake 堆栈
SingleStore 是专为数据密集型工作负载而设计的云原生数据库。它是一个分布式关系 SQL 数据库管理系统,支持 ANSI SQL,并因其在数据引入、事务处理和查询处理方面的速度而受到认可。SingleStore 可以存储关系、JSON、图形和时间序列数据,以满…...
【经验分享】Ubuntu24.04安装微信
【经验分享】Ubuntu24.04安装微信(linux官方2024universal版) 文章如下,22.04和24.04微信兼容 【经验分享】Ubuntu22.04安装微信(linux官方2024universal版) 实测Ubuntu24.04LTS版本可以兼容。...
AXI学习笔记
文章目录 AXI口诀:AXI三种总线,三种接口,一个协议背景知识一、 AMBA:二、AXI2.1 通信协议与握手机制2.2 AXI协议特点2.3 三种AXI总线类型(AXI4、AXI4-lite、AXI4-stream)2.3.1 AXI通道(5通道&am…...
Spring boot 启动报:Do not use @ for indentation
一、使用maven插件动态切换配置时出现报错 二、配置文件及pom 2.1 配置文件结构 2.2 application.yml spring: # 根据环境读取配置文件(手动) # profiles: # active: dev# 根据环境读取配置文件(通过勾选maven插件)profiles…...
【数据结构】排序(下)
个人主页~ 排序(上) 栈和队列 排序 二、常见排序的实现8、快速排序的优化9、非递归快速排序(1)基本思想(2)代码实现(3)时间复杂度(4)空间复杂度 10、归并排序…...
基于Java+Swing贪吃蛇小游戏(含课程报告)
博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...
三角形法恢复空间点深度
三角形法恢复空间点深度 如下图,以图 I 1 I_1 I1为参考,图 I 2 I_2 I2的变换矩阵为 T T T。相机光心为 O 1 O_1 O1和 O 2 O_2 O2。在图 I 1 I_1 I1中有特征点 p 1 p_1 p1,对应图 I 2 I_2 I2中有特征点 p 2 p_2 p2。理论上直…...
Linux 阻塞和非阻塞 IO 实验学习
Linux 阻塞和非阻塞 IO 实验学习 IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起&…...
JuiceFS 社区版 v1.2 发布,新增企业级权限管理、平滑升级功能
JuiceFS 社区版 v1.2 今天正式发布,这是自 2021 年开源以来的第三个大版本。v1.2 也是一个长期支持版本(LTS)。我们将持续维护 v1.2 以及 v1.1 这两个版本,v1.0 将停止更新。 JuiceFS 是为云环境设计的分布式文件系统,…...
虚拟3D沉浸式展会编辑平台降低了线上办展的门槛
在数字化浪潮的引领下,VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光,凭借优质的服务和丰富的经验,赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战,许…...
泛微E9开发 查询页面添加按钮,完成特定功能
查询页面添加按钮,完成特定功能 1、关联知识(查询页面实现新增按钮)2、功能实现2.1. 点击按钮,输出选中的checkbox的值2.2. 点击按钮,打开一个自定义对话框 3、实现方法 1、关联知识(查询页面实现新增按钮&…...
初学51单片机之数字秒表
不同数据类型间的相互转换 在C语言中,不同数据类型之间是可以混合运算的。当表达式中的数据类型不一致时,首先转换为同一类型,然后再进行计算。C语言有两种方式实现类型转换。一是自动类型转换,另外一种是强制类型转换。 转换的主…...
SpringBoot整合justauth实现多种方式的第三方登陆
目录 0.准备工作 1.引入依赖 2.yml文件 3. Controller代码 4.效果 参考 0.准备工作 你需要获取三方登陆的client-id和client-secret 以github为例 申请地址:Sign in to GitHub GitHub 1.引入依赖 <?xml version"1.0" encoding"UTF-8&quo…...
【Java算法】滑动窗口
🔥个人主页: 中草药 🔥专栏:【算法工作坊】算法实战揭秘 👖一. 长度最小的子数组 题目链接:209.长度最小的子数组 算法原理 滑动窗口 滑动窗口算法常用于处理数组/字符串等序列问题,通过定义一…...
C# —— 属性和字段
属性和字段的区别 1.都是定义在一个类中,属于类成员变量 2.字段一般都是私有的private,属性一般是公开的Public 3.字段以小驼峰命名方式 age,属性一般是以大驼峰命名 Age 4.字段可以存储数据,属性不能存储数据,通过属性…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
