Você pode usar a expansão de contraventamento. Mas é feio. Você precisa usar eval , já que a expansão de contraventamento acontece antes da expansão da variável (matriz). E "${var[*]}" com IFS=, para criar as vírgulas.
Considere um comando para gerar a string
echo {a,b,c}+{1,2,3}
Supondo que as matrizes são chamadas letters e numbers , você poderia fazer isso usando a notação "${var[*]}" , com IFS=, para inserir vírgulas entre os elementos em vez de espaços.
letters=(a b c)
numbers=(1 2 3)
IFS=,
echo {"${letters[*]}"}+{"${numbers[*]}"}
Que imprime
{a,b,c}+{1,2,3}
Agora adicione eval , então ele executa essa string como um comando
eval echo {"${letters[*]}"}+{"${numbers[*]}"}
E você começa
a+1 a+2 a+3 b+1 b+2 b+3 c+1 c+2 c+3