Bash配列のデカルト積

Bash配列のデカルト積

ループを使わずにbashで配列のデカルト積を生成する方法はありますか?

中かっこを使用して同様の操作を実行できます。

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

しかし、配列を入力として使用する必要がありますが、ほとんどの明らかなトリックは失敗しました。

答え1

支柱の拡張を使用できます。しかし、醜いです。eval中括弧拡張は(配列)変数拡張の前に発生するため、使用する必要があります。そしてカンマ"${var[*]}"を作成しますIFS=,

文字列を生成するコマンドを考えてみましょう

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

配列がandであるlettersと仮定すると、表記を使用してこれを実行numbersできます"${var[*]}"。つまり、IFS=,要素の間にスペースの代わりにコンマを挿入することです。

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

どの印刷

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

次に、evalこの文字列を追加してコマンドで実行するようにします。

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

あなたは得る

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

関連情報