パターンの配列から部分文字列を検索する

パターンの配列から部分文字列を検索する

拡張子が次のファイルがあります:

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"

関連情報