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