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

浪子不回头ぞ 提交于 2019-12-05 16:25:10
lecodesportif

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   10
2   4   6   8   10  12  14  16  18  20
3   6   9   12  15  18  21  24  27  30
4   8   12  16  20  24  28  32  36  40
5   10  15  20  25  30  35  40  45  50
6   12  18  24  30  36  42  48  54  60
7   14  21  28  35  42  49  56  63  70
8   16  24  32  40  48  56  64  72  80
9   18  27  36  45  54  63  72  81  90
10  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   4
2  4  6   8
3  6  9   12
4  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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!