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