내 쉘 스크립트 파일의 코드는 다음과 같습니다.
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
너비는 문자열 길이에 i
5를 곱하여 계산됩니다. 즉, 첫 번째 반복에서는 문자열 앞에 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!