Bash比较检查仅接受格式为0.1的值



我有这个片段:

if [[ $1 =~ ^[+-]?[0-9]+.?[0-9]*$ ]]; then
echo 'version is good'
exit 0
else 
exit 1
fi

问题是,代码段$1 =~ ^[+-]?[0-9]+.?[0-9]*$应该只验证格式化为number.number的版本

目前,这段代码将输入验证为

1
01
0.1

有没有任何方法可以使代码只接受格式化为0.1 / 0.3.2 / 0.1.141等的输入

提前谢谢。

编辑:

为了澄清这个问题,代码应该只接受用点分隔的数字,就像软件程序版本控制一样。

我建议使用以下正则表达式:^[0-9]+(.[0-9]+){1,2}$

我建议不使用正则表达式:

[[ "0" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # Nothing 
[[ "01" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # Nothing 
[[ "0.1" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # OK 
[[ "0.3.2" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # OK 
[[ "0.1.141" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # OK
[[ "10.1.141" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # OK

为了澄清这个问题,代码应该只接受数字用点分隔,就像软件程序版本控制一样。

[[ "0" == +([0-9]).+([0-9.]) ]] && echo OK # Nothing 
[[ "01" == +([0-9]).+([0-9.]) ]] && echo OK # Nothing 
[[ "0.1" == +([0-9]).+([0-9.]) ]] && echo OK # OK 
[[ "0.3.2" == +([0-9]).+([0-9.]) ]] && echo OK # OK 
[[ "0.1.141" == +([0-9]).+([0-9.]) ]] && echo OK # OK
[[ "10.1.141" == +([0-9]).+([0-9.]) ]] && echo OK # OK

最新更新