인쇄물을 계단처럼 보이도록 하려면 어떻게 해야 합니까?

인쇄물을 계단처럼 보이도록 하려면 어떻게 해야 합니까?

내 쉘 스크립트 파일의 코드는 다음과 같습니다.

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개의 추가 공백이 생기고, 두 번째 반복에서는 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!

여기에 이미지 설명을 입력하세요.

관련 정보