Chr*_* D. 4 bash brace-expansion
我试图在更深层次上学习bash,我决定制作一个乘法表.我有声明的功能:
echo $[{1..10}*{1..10}]
Run Code Online (Sandbox Code Playgroud)
但这给了我以下输出:
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
Run Code Online (Sandbox Code Playgroud)
有没有办法格式化这个输出像下面只使用1个语句(我可以弄清楚如何使用循环,但这没有乐趣:p)
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
Run Code Online (Sandbox Code Playgroud)
甚至可以在一个声明中做,还是我必须循环?
lec*_*tif 11
使用此行可以获得不错的输出而不使用循环:
echo $[{1..10}*{1..10}] | xargs -n10 | column -t
输出:
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
Run Code Online (Sandbox Code Playgroud)
更新
作为合乎逻辑的下一步,我在这里问这个乘法表是否可以有一个可变范围.有了这个帮助,我的答案适用于变量($boundary)范围并保持可读性:
boundary=4; eval echo $\[{1..$boundary}*{1..$boundary}\] | xargs -n$boundary | column -t
输出:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
Run Code Online (Sandbox Code Playgroud)
另请注意,$[..]算术符号已弃用,$((...))应使用:
boundary=4; eval eval echo "$\(\({1..$boundary}*{1..$boundary}\)\)" | xargs -n$boundary | column -t