在编写 shell 脚本时,要比较版本号大小,为什么使用 sort -V 就能正确比较出版本号的大小关系

news/2025/11/25 0:59:58/文章来源:https://www.cnblogs.com/heyongshen/p/19264911

在编写 shell 脚本时,要比较版本号大小,为什么使用 "sort -V" 就能正确比较出版本号的大小关系

版本号的两种格式

版本号的基本格式x.y.z

  • x:表示主版本号,涉及到重大的变更,不向下兼容时递增
  • y:表示次版本号,一般新增功能后能向下兼容时递增
  • z:表示补丁版本,修复 bug、小改动、打补丁这些就会递增。

版本号的扩展格式x.y.z-xxx

  • beta:公测版,功能完成但不稳定。
  • alpha:内测版,功能未完成
  • rc:候选版,基本稳定。
  • dev:开发版本,改变随时都可能变更,不稳定。
  • release / stable:正式版,生产环境使用

如何比较版本大小

不适用的方法

  • 数值运算比较:因为版本号字符串包含多个字段,还可能包含字母等非数值字符。(无法直接转换为整、小数数进行比较。)

  • 字符串比较法:因为字符串是按字符逐个比较 ASCII 值,例如:"1.2" 大于 "1.10"(与版本号的数值逻辑完全不一致)


很好用的方法

Linux 操作系统中,sort 命令的 -V 参数就是专门设计来用于版本号比较的,任意格式的版本号都可以进行比较,逻辑如下:

  • 将字符串拆分成 数字块(数值字符) + 非数字块(字母、符号等非数值字符) ,如:1.1.1f 1 . 1 . 1 f

  • 数字块按数值比较(10 > 2),非数字块按 ASCII 比较(f > 空字符)

  • 两个字符串的块与块逐个比较,直到得出结果。


例如:比较 1.1.1f1.1.1

1.1.1f 1.1.1 类型 结果
1 1 1 数字 相等
2 . . 字符 相等
3 1 1 数字 相等
4 . . 字符 相等
5 1 1 数字 相等
6 f (空) 字符 有内容 > 空

sort -V 语法格式:

语法多行输入 | sort -V

常用的方式:echo -e "V1\nV2" | sort -V

注意sort -V 的输入必须要是“多行文本”,也就是必须换行分隔,每个版本号占一行,每行就是一个元素。


例如

echo -e "1.1.1f\n1.1.1" | sort -V# 输出(默认升序排序,小的在前面)
1.1.1
1.1.1f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/975446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模电乱写

二极管 理想模型和恒压降模型非常简单。 交流小信号模型就是假设 \(u_i\) 在一个非常小的范围震荡。 然后因为 \(i(u)\) 是连续的,你在看 \(\lim \limits_{\Delta u\to 0} i(u+\Delta u)=i(u),\) 所以换来换去都是一个…

KEYDIY KD NB30-3 Universal 3-Button Flip Remote Key (5pcs/Lot) for European/American Cars

Problem: Broken or Lost Car Keys? A Universal Solution Is Hard to Find For European and American car owners, a lost or damaged remote key can disrupt daily life, while dealerships often charge exorbit…

在 SHELL 脚本中,为什么使用 sort -V 就能正确比较出版本号的大小关系

在 SHELL 脚本中,为什么使用 "sort -V" 就能正确比较出版本号的大小关系版本号的两种格式 版本号的基本格式:x.y.z字段 名称 说明x 主版本号(Major) 不向下兼容 的重大变更时递增y 次版本号(Minor) 添…

P1165 日志分析

点击查看代码 #include<bits/stdc++.h>using namespace std;const int N=200010; //mxstk和stk始终保持相同的大小,记录的是从栈底到该位置的最大值,弹出的话不会将所有的最大值弹出,如果最后一个加入的不是最…

【Java学习】【Java基础】--第2篇:抽象类和接口

一、抽象类和接口的区别特点 抽象类 接口关系 “是一个”的关系(圆形是几何形状的一种) “能做什么”的关系(微波炉能够加热)方法 可以有抽象方法和具体方法 主要是抽象方法,可以有默认方法(default)变量 可以有普…

TiDB为什么它正成为取代MySQL的新宠?

在数据库技术日新月异的今天,TiDB作为一款开源的分布式SQL数据库,正引起越来越多企业的关注。当MySQL 5.7在2023年10月达到其生命周期的终点时,许多组织都在寻找下一代数据库解决方案,TiDB便是其中的佼佼者。在数字…

[数据存储/数据库/分布式系统] 一致性哈希算法

1 概述:一致性哈希算法一致性哈希(Consistent Hashing)是一种特殊的哈希算法,其主要用于在分布式系统中实现【数据的负载均衡】和【高可用性】。它解决了【传统哈希方法】在节点增减时导致【大量数据迁移】的问题。…

[TSDB] OpenGemini 版本特性发展沿革

1 概述: OpenGemini 发展历程暨版本特性OpenGemini 是由华为云发起并开源的一款高性能、高可用、云原生的分布式时序数据库(Time Series Database, TSDB)。其目标是为物联网(IoT)、运维监控、金融等领域提供高效的…

2025电源模块厂家推荐:从技术实力到售后,这份榜单收好

2025电源模块厂家推荐:从技术实力到售后,这份榜单收好!一、电源模块厂家选择核心指南选择电源模块厂家需围绕技术适配性、质量稳定性、服务响应力三大核心维度综合评估:技术匹配度:优先考察产品功率覆盖范围、冷却方…

CF1490D-Permutation Transformation

CF1490D-Permutation Transformation 题目大意 给你一个长度为 \(n\) 的排列 \(p\) 。最大值为深度为 \(0\) 的点。左边为左子树,右边为右子树。子树中最大值的点则为深度为 \(1\) 的点。以此类推,直到子树为空。 询…

文本文件与基于二进制文件的存储的学生管理系统

文本文件与基于二进制文件的存储的学生管理系统目录文本文件与基于二进制文件的存储的学生管理系统一、项目介绍二、包结构三、核心代码介绍3.1 代码展示3.2 代码分析3.3 对比分析四、结果展示五、过程回顾5.1 问题一:…

Linux 中grep命令在文本中匹配单个的字母

001、 grep命令匹配单个的字母[root@pc1 test]# ls a.txt [root@pc1 test]# cat a.txt ## 测试数据 >chr1 xxx CATCTCCCTTAGTGTTGTCCTGAATTGCTNCTACCAGTCTGCTCTGTGTCTTTCAGGGGGACNNNNNNNNNNNNNNNNNNN NNNNNNN…

Docker Compose 安装问题排查全记录(WSL2 Ubuntu 22.04 环境)

Docker Compose 安装问题排查全记录(WSL2 Ubuntu 22.04 环境)Docker Compose 安装问题排查全记录(WSL2 Ubuntu 22.04 环境) 一、核心问题 在 WSL2 下的 Ubuntu 22.04 系统中,始终无法通过 docker compose 命令调用…

一些 DS

如题。 登山计划给定两个长为 \(n\) 的序列 \(a,b\),\(Q\) 次询问,给定 \(L,R,k\),求: \[\min_{L \leq l \leq r \leq R \wedge r-l+1=k} |\min_{i=l}^{r} a_i- \min_{i=l}^{r} b_i| \]\(n \leq 2\times 10^5,Q \…

newDay22

1.今天弄uml建模软件给我整麻爪了,下载的时候老是报错,建模的时候还对不上教学,探索了半天,剩下的时间就是上课和背单词了 2.明天练练Javaweb什么的 3.Javaweb使用还是太不熟练了,必须得多练练了

B4324 双向链表

点击查看代码 #include<bits/stdc++.h>using namespace std;const int N=500005; int l[N],r[N]; int n,m; bool del[N];void insert(int x,int y) {r[x]=r[y],l[x]=y;l[r[y]]=x,r[y]=x; }void remove(int x) {r…

系列最便宜!苹果iPhone 17e要来了:60Hz低刷灵动岛屏幕

系列最便宜!苹果iPhone 17e要来了:60Hz低刷灵动岛屏幕Posted on 2025-11-24 23:55 lzhdim 阅读(0) 评论(0) 收藏 举报据9to5mac报道,苹果将在2026年第一季度推出多款廉价产品,其中包括搭载A18 Pro的MacBook、…

Codeforces Round 1065 (Div. 3)

A. Shizuku Hoshikawa and Farm Legsvoid solve(){int n;cin >> n;if(n % 2){cout << 0 << endl;return ;}int cnt = 0;for(int i = 0; i <= n / 2; ++i){if((n - 2 * i) % 4 == 0) cnt++;}cout …

代码随想录算法训练营第四天:链表part02

代码随想录算法训练营第四天:链表part0224. 两两交换链表中的节点 leetcode链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 题目描述:给你一个链表,两两交换其中相邻的节点,并返回交换后链表…