bash - 在给定维度的情况下,使用 /、\ 和 _ 在 bash 中打印三角形
问题描述
我见过很多与这个问题非常相似的问题,但我发现困难是因为大多数功能的功能与我需要做的不同。
我想要完成的是使用 /、\ 和 _ 符号在 bash 中打印一个三角形。给我的例子就是这个。
> Dimension?
> 4
/\
/ \
/ \
--------
到目前为止,我的代码只需要我需要的 2/3,即打印底部的一侧,但我无法打印右侧。
这就是我得到的
#! /bin/bash
read -p "DIM? " DIM
for((i=1; i<=$DIM-1; i++))
do
#print the spaces
for((a=i; a<=$[$DIM-1]; a++))
do
echo -ne "*"; #im using * instead of spaces to see if everything works
done
echo "/" #this prints the side
done
#print the base
for((i=1; i<=$[$DIM*2]; i++))
do
echo -ne "_";
done
我的输出是
***/
**/
*/
________
我知道我缺少一个嵌套的 for,但我不知道如何使它工作。
任何帮助表示赞赏。
解决方案
对于这样一个微不足道的任务来说,工作量太大了。
对于除基数之外的每一行,您需要打印dim-nr
空格(其中nr
是从零开始的行数)、正斜杠、nr*2+1
空格和反斜杠。使用算术扩展printf
可以在一次调用中完成所有这些。
对于底座,dim*2
应打印破折号;同样,printf
只需一点帮助就可以轻松做到这一点seq
(也可以作为可加载的 bash 内置)。
#!/bin/bash -
read -p $'Dimension?\n' dim
for ((nr=0; nr<dim-1; nr++)); do
printf '%*s%*s\n' $((dim-nr)) '/' $((nr*2+1)) '\'
done
printf '%.s-' $(seq $((dim*2)))
printf '\n'