Pra*_*kar 4 command-line scripts 12.04
使用此 ubuntu 命令时:
${HOME}/temp/.git describe --always --tags HEAD
Run Code Online (Sandbox Code Playgroud)
此命令的输出是:
v0.1.5-2-p343h3d3
Run Code Online (Sandbox Code Playgroud)
我想1.5从上面的输出中提取并检查它是否大于 1.5。
有没有办法解决这个问题。?
版本号实际上很难比较,因为它们通常不是标准的数学比较(例如这个有两个小数点会导致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
Run Code Online (Sandbox Code Playgroud)
这基本上意味着我们可以对版本进行排序,以便最新的在最后一行。我们所要做的就是与最后一行、在if或 快捷方式中的字符串进行比较:
[[ $(echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER
Run Code Online (Sandbox Code Playgroud)
玩弄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
Run Code Online (Sandbox Code Playgroud)
或者您可以将其分解以提高可读性:
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
Run Code Online (Sandbox Code Playgroud)