Semver与Bash

时间:2017-04-11 23:44:10

标签: node.js bash shell semantic-versioning

使用bash脚本,如果节点版本小于特定值,我想采取行动。

如何将Bmver版本与Bash进行比较?

类似的东西:

NV=$(node --version)

if [[ ${NV} < 5 ]]; then 
   # do something
fi

显然不太正确

node --version输出看起来像:

$ node --version
v6.9.5

2 个答案:

答案 0 :(得分:1)

您可以使用sort -V来比较this post中所述的版本。一个非常好的oneliner。

或者如果你不介意利用debian发行版(我在这里假设这个前提),你可以:

$ dpkg --compare-versions $(node --version | grep -Eo "([0-9]\.)+[0-9]+") lt 5
$ echo $?
$ 1

答案 1 :(得分:1)

如果你需要做的只是比较第一个数字,你可以这样做:

nv=$(node --version)
if [[ $nv =~ ^v([0-9]+) ]] && (( ${BASH_REMATCH[1]} > 5 )) ; then 
   # do something
fi

此代码使用=~正则表达式匹配运算符来匹配前导&#34; v&#34;后面的任何数字序列,括号允许将数字序列保存在子表达式中,然后对保存的子表达式进行数值比较(在索引1的BASH_REMATCH数组中找到)。

请注意,通常建议(尽管不是严格要求)使环境变量以外的变量为小写。