首页 > 解决方案 > 在给定维度的情况下,使用 /、\ 和 _ 在 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,但我不知道如何使它工作。

任何帮助表示赞赏。

标签: bash

解决方案


对于这样一个微不足道的任务来说,工作量太大了。
对于除基数之外的每一行,您需要打印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'

推荐阅读