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