#/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
请帮助我打印右侧?
预期输出:在图像右侧的楼梯中
答案 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的答案,以获取使用该循环形式的示例。 (此外,请确保使用正确的外壳正确标记问题,以确保获得最适用的答案)