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