在外壳中使用循环进行右间距打印

时间:2018-06-25 04:13:52

标签: bash shell

#/bin/bash

for i in {1..6}; do
    printf '#\n' 
    for (( n = 0; n < $i; n++ )); do
        printf '#'
    done
done

输出:

vivsingh@blr-mp4sj:~/Desktop$ ./staircases.sh 

enter image description here

请帮助我打印右侧?

预期输出:在图像右侧的楼梯中

2 个答案:

答案 0 :(得分:0)

使用Bash,在第一个#前面加上适当数量的空格,并带有条件格式:

#!/bin/bash

for i in {1..6}; do
    printf "%$((6 - i + 1))s" "#"
    for ((n = 1; n < i; n++)); do
        printf '#'
    done
    printf '\n'
done

输出:

     #
    ##
   ###
  ####
 #####
######

答案 1 :(得分:0)

虽然我怀疑您使用了C样式的for循环,但是您打算用POSIX-shell以外的其他标记您的问题,如果您仅限于POSIX-shell,那么您可以轻松地使用while循环来完成您要尝试的工作。

#!/bin/sh

cnt=0
line='#'

while [ "$cnt" -lt '6' ]; do
    printf "%6s\n" "$line"
    line="$line#"
    cnt=$((cnt+1))
done

使用/输出示例

$ sh prn6.sh
     #
    ##
   ###
  ####
 #####
######

您还可以使用 format-specifier '%*s'形式输入要输出的#数作为第一个参数(位置参数)如果未指定参数,则使用默认的6到程序中,例如

#!/bin/sh

cnt=0
line='#'
lim=${1:-6}

while [ "$cnt" -lt "$lim" ]; do
    printf "%*s\n" "$lim" "$line"
    line="$line#"
    cnt=$((cnt+1))
done

使用/输出示例

$ sh prn6.sh 3
  #
 ##
###

$ sh prn6.sh 8
       #
      ##
     ###
    ####
   #####
  ######
 #######
########

无论您是否受限于POSIX-shell,对输出进行右对齐的关键是使用printf%6s format-specifier 其中6是您的字段宽度,默认情况下是右对齐,或者,您只需要输出不同数量的spaces,然后'#'以正确的顺序一次输入一个字符。

由于看起来您可以使用C样式for循环,因此请看一下Codeforester的答案,以获取使用该循环形式的示例。 (此外,请确保使用正确的外壳正确标记问题,以确保获得最适用的答案)