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.]+(.+)'
我有一个版本字符串,例如
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.]+(.+)'