How can I make a multiplication table using bash brace expansion? So far I have this: echo $[{1..10}*{1..10}] How can I make a multiplication table using bash brace expansion? So far I have this: echo $[{1..10}*{1..10}] bash bash

How can I make a multiplication table using bash brace expansion? So far I have this: echo $[{1..10}*{1..10}]


Use this line for a nice output without using loops:

echo $[{1..10}*{1..10}] | xargs -n10 | column -t

Output:

1   2   3   4   5   6   7   8   9   102   4   6   8   10  12  14  16  18  203   6   9   12  15  18  21  24  27  304   8   12  16  20  24  28  32  36  405   10  15  20  25  30  35  40  45  506   12  18  24  30  36  42  48  54  607   14  21  28  35  42  49  56  63  708   16  24  32  40  48  56  64  72  809   18  27  36  45  54  63  72  81  9010  20  30  40  50  60  70  80  90  100

Update

As a logical next step, I asked here if this multiplication table can have a variable range. With this help, my answer works with a variable ($boundary) range and stays quite readable:

boundary=4; eval echo $\[{1..$boundary}*{1..$boundary}\] | xargs -n$boundary | column -t

Output:

1  2  3   42  4  6   83  6  9   124  8  12  16

Also note that the $[..] arithmetic notation is deprecated and $((...)) should be used instead:

boundary=4; eval eval echo "$\(\({1..$boundary}*{1..$boundary}\)\)" | xargs -n$boundary | column -t


The printf built-in repeats its format as many times as necessary to print all arguments, so:

printf '%d %d %d %d %d %d %d %d %d %d\n' $[{1..10}*{1..10}]

If you want to avoid repeating the %d bit, it's trickier.

printf "$(echo %$[{1..10}*0]d)\\n" $[{1..10}*{1..10}]

In production code, use a loop.