印刷物を階段のように見えるようにするにはどうすればよいですか?

印刷物を階段のように見えるようにするにはどうすればよいですか?

私のシェルスクリプトファイルのコードは次のとおりです。

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シェルでbash適切な文字列幅を使用します。

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

これは、「次のパラメータは右揃え文字列の幅を指定します」を意味するプレースホルダをprintf使用します。%*s幅は、文字列の長さにi5を掛けて計算されます。つまり、最初の反復では文字列の前に 0 個の追加の空白が生成され、2 回目の反復では 5 つの追加の空白が生成され、3 番目の反復では 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!

ここに画像の説明を入力してください。

おすすめ記事