当使用这个 ubuntu 命令时:
${HOME}/temp/.git describe --always --tags HEAD
该命令的输出是:
v0.1.5-2-p343h3d3
我想1.5
从上面的输出中提取并检查它是否大于 1.5。
有什么解决方案吗?
答案1
版本号实际上很难比较,因为它们通常不是标准的数学比较(例如,这个版本号有两个小数点,让人感到bc
困惑)。
因此,我转向一个鲜为人知的选项,sort
它可用于对版本字符串进行排序。考虑以下内容:
$ echo -e "v0.1.5\nv0.1.6-2-p343h3d3" | sort -V
v0.1.5
v0.1.6-2-p343h3d3
oli@bert:~$ echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V
v0.1.4-2-p343h3d3
v0.1.5
这基本上意味着我们可以对版本进行排序,以便最新版本位于最后一行。然后我们要做的就是在if
或快捷方式 if 内对最后一行进行字符串比较:
[[ $(echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER
摆弄一下v0.1.4-2-p343h3d3
绳子。如果你把它粘在上面,0.1.6
它就会发出回声。
现在将这一切重新带回到你的命令中:
[[ $(echo -e "v0.1.5\n$(${HOME}/temp/.git describe --always --tags HEAD)" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER
或者你可以将其分解为以下形式以便于阅读:
THRESHOLD="v0.1.5"
VERSION=$(${HOME}/temp/.git describe --always --tags HEAD)
if [[ $(echo -e "$THRESHOLD\n$VERSION" | sort -V | tail -1) != "$THRESHOLD" ]]; then
echo GREATER
fi
答案2
你可以做类似的事情
${HOME}/temp/.git describe --always --tags HEAD | awk ' {
match ($0, /[0-9]+\.[0-9]+\.[0-9]+/,m)
if(m[0]>"0.1.5"){
print("hello")
}
}'
这将检查第一个匹配的正则表达式结果。这只是另一种方法,尽管我不确定这种方法对你来说有多实用。
干杯
答案3
如果提取的版本大于 1.5,则可以使用以下命令来exit
查看状态0
${HOME}/temp/.git describe --always --tags HEAD | perl -ne '/v\d+\.(\d+\.\d+)/;exit(1) if $1 <= 1.5'