bash 从字符串中删除子字符串

roe*_*ard 2 bash

我有一个像 package-0.0.1.jar 这样的包名称,我需要从该字符串中删除版本信息以及以 .jar 结尾的文件。我怎样才能实现这个目标?我发现你可以使用“%”符号来剪切字符串的一部分。所以我尝试了

JNAME="package-0.0.1.jar"
CLEAN="${JNAME%-.*\.jar}"
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用,因为 CLEAN 之后具有完整的 JNAME 内容。% 符号后面的正确顺序是什么?

use*_*686 5

%带/的扩展#不使用正则表达式;他们使用 shell glob。仅用于-*.jar匹配版本和后缀。

\n
CLEAN=${JNAME%-*.jar}\n
Run Code Online (Sandbox Code Playgroud)\n

如果需要正则表达式,可以使用Bash 的[[ a =~ b ]]${BASH_REMATCH[\xe2\x80\xa6]}(尽管在本例中不需要):

\n
if [[ $JNAME =~ ^(.+)-[^-]+\\.jar$ ]]; then\n    CLEAN=${BASH_REMATCH[1]}\nfi\n
Run Code Online (Sandbox Code Playgroud)\n