Bashのprintfコマンド

Bashのprintfコマンド
printf "%50s\n" " I ate 4 eggs"

この例では、変数に50を割り当てたいと思います。 bash forループでこの変数をどのように使用しますか?

どんなアイデアがありますか?

答え1

少なくとも、Cスタイル変換修飾子を使用して可変フィールド幅を渡すbashことができます。printf *

width=50
printf '%*s\n' $width "I ate 4 eggs"
                                      I ate 4 eggs

man 3 printf詳細より。

forループでこれを使用する方法は、目的の出力が何であるかによって異なります。


ご意見に基づいてご利用いただけます

for i in {45..50}; do 
  for j in {1..13}; do 
    printf '%*.*s\n' $i $j "I ate 4 eggs"
  done
done

フィールドの幅と精度を変数として提供すると、

                                   I
                                   I
                                  I a
                                 I at
                                I ate
                               I ate
                              I ate 4
                             I ate 4
                            I ate 4 e
                           I ate 4 eg
                          I ate 4 egg
                         I ate 4 eggs
                         I ate 4 eggs
                                     I
                                    I
                                   I a
                                  I at
                                 I ate
                                I ate
                               I ate 4
                              I ate 4
                             I ate 4 e
                            I ate 4 eg
                           I ate 4 egg
                          I ate 4 eggs
                          I ate 4 eggs

など。

答え2

次のように変数に50を割り当てることができます。

variable=50

次のようにforループでこの変数を使用できます。

for i in foo bar baz; do
    printf "%${variable}s\n" "I ate 4 eggs"
done

printfステートメントのパディングを増やしたい場合は、次のことができます。

$ for i in {45..50}; do printf "%${i}s\n" "I ate 4 eggs"; done
                                 I ate 4 eggs
                                  I ate 4 eggs
                                   I ate 4 eggs
                                    I ate 4 eggs
                                     I ate 4 eggs
                                      I ate 4 eggs

関連情報