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

bash parameter substitute digit one or more times

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

version=1.2.23b2

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

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

我的想法是 * 表示没有或多次重复前导模式,但实际上它表示没有或多次重复任何字符。所以我想让我的模式表达,这只是关于数字,一次或多次。

* 在 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.]+(.+)'