ループを使わずに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