Найти подстроку из массива шаблонов

Найти подстроку из массива шаблонов

У меня есть файл с расширениями:

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"

Связанный контент