man printf.1
नीचे एक नोट है: "... आपके शेल का अपना संस्करण हो सकता है printf
..."। इस प्रश्न के लिए टैग किया गया है bash
, लेकिन यदि संभव हो तो, मैं किसी भी शेल के लिए स्क्रिप्ट को पोर्टेबल लिखने की कोशिश करता हूं । dash
आमतौर पर पोर्टेबिलिटी के लिए एक अच्छा न्यूनतम आधारभूत है - तो जवाब यहाँ में काम करता है bash
, dash
, औरzsh
। यदि कोई स्क्रिप्ट उन 3 में काम करती है, तो यह केवल कहीं भी पोर्टेबल होने की संभावना है।
[1]printf
में नवीनतम कार्यान्वयन आउटपुट को रंगीन नहीं करता है जो एक एएनएसआई से बच चरित्र के साथ एक प्रारूप निर्दिष्ट करता है - लेकिन, ऑक्टल (एक एएससीआईआई के बराबर ) के साथ संयुक्त एक प्रारूप विनिर्देशक को काम मिलेगा। कृपया किसी भी आउटलेयर के लिए टिप्पणी करें, लेकिन AFAIK, सभी गोले लागू किए गए हैंdash
%s
\e
%b
\033
ESC
printf
एक नंगे न्यूनतम पर ASCII अष्टक उपसमुच्चय का उपयोग लिए किया है।
प्रश्न का शीर्षक "प्रिंटफ के साथ रंगों का उपयोग करना" के लिए, प्रारूपण को निर्धारित करने का सबसे पोर्टेबल तरीका है , ऑक्टल एस्केप के साथ %b
प्रारूप विनिर्देशक को printf
( @ व्लाद से पहले के उत्तर में संदर्भित) \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
ओपी से फॉर्मेट स्पेसिफायर खोलते और बंद नियंत्रण चरित्र दृश्यों के बीच प्रारूप स्ट्रिंग के बीच में है।
[१] रेफरी: man dash
सेक्शन "बिलिंस" :: "प्रिंटफ" :: "फॉर्मेट"