gpt4 book ai didi

bash - 修复 shell 脚本以增加 semversion

转载 作者:行者123 更新时间:2023-12-03 23:27:55 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to increment version number in a shell script?

(12 个回答)


1年前关闭。




我从来没有使用过 shell (bash),但在脚本中发现了一些错误,我曾经用它来增加版本。脚本工作正常,直到这种情况

version=1.27.9
echo $version | awk -F. -v OFS=. 'NF==1{print ++$NF}; NF>1{if(length($NF+1)>length($NF))$(NF-1)++; $NF=sprintf("%0*d", length($NF), ($NF+1)%(10^length($NF))); print}'

1.28.0 <-- result, but I need 1.27.10

在这种情况下 new_version将等于 1.28.0 .如何更改此脚本以避免增加 MINOR 编号?对于这种情况,我期待 1.27.10
我没有shell经验,所以不知道从哪里开始。我在这里找到了这个脚本,在 SO 上并使用它。请帮我解决我的问题。先感谢您。

最佳答案

纯 Bash 解决方案:

#!/usr/bin/env bash

version='1.27.9'

# Read Semver fields
IFS=. read -r major minor patch <<<"$version"

# Increment patch version
# same as patch="$((patch + 1))"
((patch++))

# Re-assemble version string from Semver fields
printf -v version '%d.%d.%d' "$major" "$minor" "$((patch))"
  • IFS=. ;将字段分隔符设置为 .read的本地范围内命令。
  • read -r major minor patch <<<"$version" : 从 "$version 读取 Semver 字段这里字符串。
  • ((patch++)) : 增加 $patch使用 Bash 的独立算法的版本。 (可以用 patch="$((patch + 1))" 代替)
  • printf -v version '%d.%d.%d' "$major" "$minor" "$((patch))" : 格式化 $version带有更新字段的字符串,使用 Bash 的 printf -v variable (输出到变量)功能。

  • 相当于 @RavinderSingh13 's version 的简写单行:
    IFS=. read -r a b c<<<"$version";echo "$a.$b.$((c+1))"
    或 POSIX 单线:

    OIFS="$IFS";IFS=.;set -- $version;echo "$1.$2.$((10#$3+1))";IFS="$OIFS";set --
  • OIFS="$IFS" : 保存 内部 传真 小号 分离器。
  • IFS=. : 将点设置为字段分隔符。
  • set -- $version : 使用 IFS 将版本字符串拆分为参数.
  • echo "$1.$2.$((10#$3+1))" : 打印升级的次要 Semver 10#$3为第三个参数指定基数 10。
  • IFS="$OIFS" : 恢复 IFS到它的原始值(value)。
  • set -- : 清除参数数组。
  • 关于bash - 修复 shell 脚本以增加 semversion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59435639/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com