如何在Bash中对圆点分隔的版本号执行末位减1操作
调整后实现方案
核心逻辑是先拆分点分版本号的前缀部分和末位数字段,对末位单独做减法后再拼接回完整版本号,可直接使用原生Bash语法实现,无需额外依赖外部工具:
#!/bin/bash LATEST_RELEASE="myproduct_1.0.0.55" # 提取纯版本号部分 RELEASE_NUMBER=`echo $LATEST_RELEASE | sed 's/[^0-9.]//g'` echo "当前版本号: $RELEASE_NUMBER" # 拆分版本号前缀和末位 VERSION_PREFIX=${RELEASE_NUMBER%.*} LAST_SEGMENT=${RELEASE_NUMBER##*.} # 末位减1后拼接 PREVIOUS_RELEASE="${VERSION_PREFIX}.$((LAST_SEGMENT - 1))" echo "上一个版本号: $PREVIOUS_RELEASE"
逻辑说明
${RELEASE_NUMBER%.*}是Bash的参数扩展语法,作用是删除变量最后一个.以及之后的所有内容,得到版本号前缀(比如1.0.0.55处理后得到1.0.0)${RELEASE_NUMBER##*.}作用是删除变量最后一个.以及之前的所有内容,得到版本号的末位数字(比如1.0.0.55处理后得到55)- 对末位做整数减法后拼接前缀即可得到目标版本号
边界提示
如果存在末位为0的版本号(如1.0.0.0),直接减1会得到负数,如有这类场景需要额外加逻辑处理退位规则,当前代码适配常规末位为正整数的场景。
内容的提问来源于stack exchange,提问作者Stacker
相关产品推荐
相关产品推荐

