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
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":: "포맷"