拡張子が次のファイルがあります:
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"