如何打印输出看起来像楼梯?

如何打印输出看起来像楼梯?

我的 shell 脚本文件中的代码是这样的:

for i in {0..3}
do 
     COLOR_Value="\033[1;3"$i"m \t Hello World"
     echo -e $COLOR_Value
done

输出是这样的:(每个 Hello World 在重新打印每一行时都会改变颜色)

     Hello World 
     Hello World
     Hello World

我希望它这样做:

Hello World
     Hello World
          Hello World

我可以进行哪些更改以获得我想要的输出?

答案1

printf在shell 中使用bash适当的字符串宽度:

string='Hello World!'
for i in {0..3}; do
    width=$(( ${#string} + i*5 ))
    printf '%*s\n' "$width" "$string"
done

这使用printf占位符%*s,这意味着“下一个参数指定宽度的右对齐字符串”。宽度的计算方式为字符串的长度加乘以i5。这意味着在第一次迭代中,您会在字符串前面获得 0 个额外空格,在第二次迭代中获得 5 个额外空格,在第三次迭代中获得 10 个额外空格,在最后一次迭代中获得 15 个额外空格。

有颜色:

string='Hello World!'
for i in {0..3}; do
    width=$(( ${#string} + i*5 ))
    tput setaf "$(( i + 1 ))"
    printf '%*s\n' "$width" "$string"
done

tput sgr0  # reset colors

或者将颜色更改作为printf输出字符串的一部分(在每个字符串后重置):

string='Hello World!'
color_reset=$( tput sgr0 )

for i in {0..3}; do
    width=$(( ${#string} + i*5 ))
    color=$( tput setaf "$(( i + 1 ))" )
    printf '%s%*s%s\n' "$color" "$width" "$string" "$color_reset"
done

运行它:

$ bash script.sh
Hello World!
     Hello World!
          Hello World!
               Hello World!

在此输入图像描述

相关内容