Linuxbash或sed命令增加版本号

我需要在脚本中添加一些东西来增加版本号:当我有 string 时1.0.2,我想要一个 bash 命令来让它1.0.3.

像这样的东西,但这不起作用:

CI_COMMIT_TAG=1.0.2
patch=$((CI_COMMIT_TAG + 1)); echo new path=${CI_COMMIT_TAG}
CI_COMMIT_TAG=1.0.2
patch=$((CI_COMMIT_TAG + 1)); echo new path=${CI_COMMIT_TAG}

给出这个错误:

可能是因为1.0.2是字符串而不是数字。

如何解决这个问题?

回答

(imo) 最简单的方法是将版本号拆分为单独的(整数)组件,进行数学运算,然后重新粘贴到所需的版本字符串中。

在这一点上,有几种方法可以处理这个想法。

使用一些基本命令来实现每个建议的步骤的一个想法:

CI_COMMIT_TAG=1.0.2
IFS=. read -r v1 v2 v3 <<< "${CI_COMMIT_TAG}"    # split into (integer) components
((v3++))                                         # do the math
patch="${v1}.${v2}.${v3}"                        # paste back together

这会产生:

$ echo "${patch}"
1.0.3

通过拆分为单独的(整数)组件,如果/当您想要增加第一个/第二个组件时,它也会更容易。



另一种让我们awk完成所有工作的方法:

$ awk '
BEGIN {FS=OFS="."}                    # define input/output field delimiter as "."
      {$3++                           # increment field #3 "+1" (think "inplace" increment of field #3)
       print                          # print current line
      }
' <<< "${CI_COMMIT_TAG}"
1.0.3

# removing comments, collapsing to a one-liner, and storing the result in variable 'patch'

$ patch=$(awk 'BEGIN {FS=OFS="."} {$3++; print}' <<< "${CI_COMMIT_TAG}")
$ echo $patch
1.0.3


注意:这两种解决方案都假定第三个组件是整数,否则添加 '+1' ( v3++/ $3++)的步骤将失败;可以添加额外的编码来验证第三个组件实际上是一个整数。

  • In the `awk` command, replace `$3++` with `if ($NF ~ /^[0-9]+$/) $NF++` to cope with other than 3 components, and skip non-numerics.

以上是Linuxbash或sed命令增加版本号的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>