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