從模式數組中尋找子字串

從模式數組中尋找子字串

我有一個帶有擴展名的檔案:

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"

相關內容