I have an array that contains a list of patterns and a string. I would like to check whether the string matches any of the patterns in the array. For example if patterns=("foo*" "*bar"), then a test for "foob", "obar", and "foobar" should return true and one for "ooba" should return false.

I hoped that I could use the following:

if [[ -v patterns[(k)$string] ]]; then ... fi;

Unfortunately, the pattern matching effect of the subscript flag (k) only works for associative arrays, not for regular arrays. I fixed the "problem" by turning my array of patterns into an associative array:

local -A patterns=("foo*" X "*bar" X)

It's not a big deal but it feels a bit unnecessarily complicated. Is there a simpler way to achieve this?

If not, would it make sense to change (k) and (K) to also do pattern matching on regular arrays?

Philippe