다음과 같이 작성하면 텍스트가 파란색으로 출력됩니다.
printf "\e[1;34mThis is a blue text.\e[0m"
하지만 printf에 형식을 정의하고 싶습니다.
printf '%-6s' "This is text"
이제 색상을 추가하는 방법에 대한 몇 가지 옵션을 시도했지만 성공하지 못했습니다.
printf '%-6s' "\e[1;34mThis is text\e[0m"
나는 성공하지 못한 채 서식에 속성 코드를 추가하려고 시도했습니다. 이것은 작동하지 않으며 내 경우와 같이 형식을 정의한 printf에 색상이 추가되는 예를 찾을 수 없습니다.
답변
부품을 깨끗하게 분리하는 대신 함께 혼합하는 것입니다.
printf '\e[1;34m%-6s\e[m' "This is text"
기본적으로 고정 된 항목은 형식에, 변수 항목은 매개 변수에 넣습니다.
답변
구식 터미널 코드를 사용하는 대신 다음 대안을 제안 할 수 있습니다. 더 읽기 쉬운 코드를 제공 할뿐만 아니라 원래 의도 한대로 형식 지정자와 색상 정보를 별도로 유지할 수도 있습니다.
blue=$(tput setaf 4)
normal=$(tput sgr0)
printf "%40s\n" "${blue}This text is blue${normal}"
추가 색상은 여기 내 대답을 참조하십시오.
답변
이것은 나를 위해 작동합니다.
printf "%b" "\e[1;34mThis is a blue text.\e[0m"
에서 printf(1)
:
%b ARGUMENT as a string with '\' escapes interpreted, except that octal
escapes are of the form \0 or \0NNN
답변
이것은 터미널에서 다른 색상을 얻는 작은 프로그램입니다.
#include <stdio.h>
#define KNRM "\x1B[0m"
#define KRED "\x1B[31m"
#define KGRN "\x1B[32m"
#define KYEL "\x1B[33m"
#define KBLU "\x1B[34m"
#define KMAG "\x1B[35m"
#define KCYN "\x1B[36m"
#define KWHT "\x1B[37m"
int main()
{
printf("%sred\n", KRED);
printf("%sgreen\n", KGRN);
printf("%syellow\n", KYEL);
printf("%sblue\n", KBLU);
printf("%smagenta\n", KMAG);
printf("%scyan\n", KCYN);
printf("%swhite\n", KWHT);
printf("%snormal\n", KNRM);
return 0;
}
답변
이것은 bash 스크립팅을 사용하여 컬러 텍스트를 인쇄하는 작은 기능입니다. 원하는만큼 스타일을 추가 할 수 있으며 탭과 새 줄을 인쇄 할 수도 있습니다.
#!/bin/bash
# prints colored text
print_style () {
if [ "$2" == "info" ] ; then
COLOR="96m";
elif [ "$2" == "success" ] ; then
COLOR="92m";
elif [ "$2" == "warning" ] ; then
COLOR="93m";
elif [ "$2" == "danger" ] ; then
COLOR="91m";
else #default color
COLOR="0m";
fi
STARTCOLOR="\e[$COLOR";
ENDCOLOR="\e[0m";
printf "$STARTCOLOR%b$ENDCOLOR" "$1";
}
print_style "This is a green text " "success";
print_style "This is a yellow text " "warning";
print_style "This is a light blue with a \t tab " "info";
print_style "This is a red text with a \n new line " "danger";
print_style "This has no color";
답변
컬러 쉘 출력을 인쇄하기 위해이 c 코드를 사용합니다. 코드는 이 게시물을 기반으로 합니다 .
//General Formatting
#define GEN_FORMAT_RESET "0"
#define GEN_FORMAT_BRIGHT "1"
#define GEN_FORMAT_DIM "2"
#define GEN_FORMAT_UNDERSCORE "3"
#define GEN_FORMAT_BLINK "4"
#define GEN_FORMAT_REVERSE "5"
#define GEN_FORMAT_HIDDEN "6"
//Foreground Colors
#define FOREGROUND_COL_BLACK "30"
#define FOREGROUND_COL_RED "31"
#define FOREGROUND_COL_GREEN "32"
#define FOREGROUND_COL_YELLOW "33"
#define FOREGROUND_COL_BLUE "34"
#define FOREGROUND_COL_MAGENTA "35"
#define FOREGROUND_COL_CYAN "36"
#define FOREGROUND_COL_WHITE "37"
//Background Colors
#define BACKGROUND_COL_BLACK "40"
#define BACKGROUND_COL_RED "41"
#define BACKGROUND_COL_GREEN "42"
#define BACKGROUND_COL_YELLOW "43"
#define BACKGROUND_COL_BLUE "44"
#define BACKGROUND_COL_MAGENTA "45"
#define BACKGROUND_COL_CYAN "46"
#define BACKGROUND_COL_WHITE "47"
#define SHELL_COLOR_ESCAPE_SEQ(X) "\x1b["X"m"
#define SHELL_FORMAT_RESET ANSI_COLOR_ESCAPE_SEQ(GEN_FORMAT_RESET)
int main(int argc, char* argv[])
{
//The long way
fputs(SHELL_COLOR_ESCAPE_SEQ(GEN_FORMAT_DIM";"FOREGROUND_COL_YELLOW), stdout);
fputs("Text in gold\n", stdout);
fputs(SHELL_FORMAT_RESET, stdout);
fputs("Text in default color\n", stdout);
//The short way
fputs(SHELL_COLOR_ESCAPE_SEQ(GEN_FORMAT_DIM";"FOREGROUND_COL_YELLOW)"Text in gold\n"SHELL_FORMAT_RESET"Text in default color\n", stdout);
return 0;
}
답변
man printf.1
하단에 “… 쉘에 자체 버전이있을 수 있습니다.”라는 메모가 있습니다 printf
. 이 질문은 태그로 지정되어 bash
있지만 가능하다면 모든 쉘에 이식 가능한 스크립트를 작성하려고합니다 . dash
휴대 좋은 최소 기준은 보통 – 대답은 여기에서 작동하므로 bash
, dash
, zsh
. 스크립트가 그 3에서 작동한다면 거의 모든 곳으로 이식 가능합니다.
의 최신 구현 printf
에 dash
[1] 주어진 색상 화 출력되지 않습니다 %s
은 ANSI 이스케이프 문자와 형식 지정자 \e
– 하지만, 형식 지정자 %b
진수와 결합 \033
(아스키에 상응하는 ESC
) 작업이 완료 얻을 것이다. 이상치에 대해서는 주석을 달았지만 AFAIK, 모든 쉘은 printf
최소한 ASCII 8 진 서브 세트를 사용하도록 구현 되었습니다.
“printf와 함께 색상 사용”이라는 질문의 제목에 대해 형식 지정 을 설정 하는 가장 이식 가능한 방법 %b
은 printf
( @Vlad 의 이전 답변 에서 참조한) 형식 지정자를 8 진수 이스케이프와 결합하는 것 \033
입니다.
portable-color.sh
#/bin/sh
P="\033["
BLUE=34
printf "-> This is %s %-6s %s text \n" $P"1;"$BLUE"m" "blue" $P"0m"
printf "-> This is %b %-6s %b text \n" $P"1;"$BLUE"m" "blue" $P"0m"
출력 :
$ ./portable-color.sh
-> This is \033[1;34m blue \033[0m text
-> This is blue text
… 그리고 ‘파란색’은 두 번째 줄에서 파란색입니다.
%-6s
OP 의 형식 지정자는 열기 및 닫기 제어 문자 시퀀스 사이의 형식 문자열 중간에 있습니다.
[1] 참조 : man dash
섹션 “Builtins”:: “printf”:: “포맷”