我在bash脚本中执行此操作:
#!/bin/bash
set -e
function getVersion {
REGEX="^$2-(.*?)\.ear$"
if [[ "$1" =~ $REGEX ]]; then
echo "${BASH_REMATCH[1]}"
else
echo "Cannot deduce artifact version from file name $1, exiting" >&2
exit 1
fi
}
MY_APP=app-1.3.4.ear
APP_VERSION=$(getVersion "$MY_APP" app)
echo "Version is $APP_VERSION"
我希望getVersion
返回1.3.4
,但它会生成错误消息。为什么正则表达式不匹配?
答案 0 :(得分:2)
Bash并不支持?
在正则表达式中表示非贪婪。
幸运的是,在这种情况下你不需要它:
function getVersion {
REGEX="^$2-(.*)\.ear$"
if [[ "$1" =~ $REGEX ]]; then
echo "${BASH_REMATCH[1]}"
else
echo "Cannot deduce artifact version from file name $1, exiting" >&2
exit 1
fi
}
您指定版本号后面必须包含的内容可防止.*
消费它。
顺便说一句,我建议不要在shell中使用大写变量名。它们会在内部使用,因此您可能会意外覆盖有用的内容。
我通常也建议不要使用特定于bash的function
语法来支持标准getVersion() {
,但是您使用的是bash功能,所以我猜它是不是一个问题。