从模式数组中查找子字符串

从模式数组中查找子字符串

我有一个带有扩展名的文件:

f1=f1.e1.e2.e3.sh.pl.cpp

我有一个包含扩展列表的数组:

exts=(sh pl py)

我想从文件名中删除 exts 中的扩展名。有什么技巧吗?我想到的是这样的:

${f1%.${exts[@]}}

这显然不起作用。

答案1

我会从你的exts数组构造一个模式,然后使用sed

f1=f1.e1.e2.e3.sh.pl.cpp
exts=(sh pl py)


function array_to_regex_alts() { # joins the array elements by \|
    echo -n "$1"; shift; printf "\|%s" "$@"
}

pattern="\.\($(array_to_regex_alts ${exts[@]} )\)"

echo $f1 | sed "s/$pattern//g"

相关内容