bash参数替换数字一次或多次

时间:2017-07-28 10:51:13

标签: bash parameter-expansion

我有一个版本字符串,例如

version=1.2.23b2

我想只有b2的最后一部分,所以我尝试了这个:

${version##*[0-9]*.[0-9]*.[0-9]*} 

我的想法是*意味着没有或多次重复领先模式,但实际上它意味着任何角色没有或多次。所以我希望我的模式表达,这只是数字,一次或多次。

1 个答案:

答案 0 :(得分:1)

glob模式中的

*匹配任何字符0次或更多次。

您可以在此处使用扩展的glob模式:

shopt -s extglob 
echo "${version##+([0-9.])}"
b2

否则,你可以在这里使用正则表达式:

version='1.2.23b2'
re='^[0-9]+.[0-9]+.[0-9]+(.+)'
[[ $version =~ $re ]] && echo "${BASH_REMATCH[1]}"

b2

即使这个正则表达式应该在上面工作:

re='^[0-9.]+(.+)'