Array Produit cartésien en bash

Existe-t-il un moyen de générer un produit cartésien de arrays sans utiliser de loops dans bash?

On peut utiliser des accolades pour faire une chose similaire:

echo {a,b,c}+{1,2,3} a+1 a+2 a+3 b+1 b+2 b+3 c+1 c+2 c+3 

mais j'ai besoin d'utiliser des arrays comme inputs, et les trucs les plus évidents me manquent.

Vous pourriez utiliser l'expansion d'accolade. Mais c'est moche. Vous devez utiliser eval , car l'expansion d'accolade se produit avant l'expansion de la variable (array). Et "${var[*]}" avec IFS=, pour créer les virgules.

Considérons une command pour générer la string

 echo {a,b,c}+{1,2,3} 

En supposant que les arrays sont appelés letters et numbers , vous pouvez le faire en utilisant la notation "${var[*]}" , avec IFS=, pour insert des virgules entre les éléments au lieu des espaces.

 letters=(abc) numbers=(1 2 3) IFS=, echo {"${letters[*]}"}+{"${numbers[*]}"} 

Quels estampes

 {a,b,c}+{1,2,3} 

Maintenant, ajoutez eval , donc il exécute cette string en tant que command

 eval echo {"${letters[*]}"}+{"${numbers[*]}"} 

Et vous obtenez

 a+1 a+2 a+3 b+1 b+2 b+3 c+1 c+2 c+3