यहां क्या हो रहा है?बॉर्न शेल printf% s तर्क पर फिर से क्यों होता है?
printf.sh:
#! /bin/sh
NAME="George W. Bush"
printf "Hello, %s\n" $NAME
कमांड लाइन सत्र:
$ ./printf.sh
Hello, George
Hello, W.
Hello, Bush
अद्यतन: printf "Hello, %s\n" "$NAME"
काम करता है। कारण है कि मैं echo
उपयोग नहीं करते समय के लिए, पर विचार
echo.sh:
#! /bin/sh
FILE="C:\tmp"
echo "Filename: $FILE"
कमांड लाइन:
$ ./echo.sh
Filename: C: mp
POSIX spec for echo
कहते हैं, "वे नए एप्लिकेशन के बजाय printf
उपयोग करने के लिए प्रोत्साहित किया जाता है echo
"(इस और अन्य कारणों से)।
बैश बिल्टिन इको डिफ़ॉल्ट रूप से \ प्रतिस्थापन नहीं करता है, लेकिन पीओएसआईक्स शैल (उदा। डैश) इको करता है, क्योंकि spec के आपके लिंक से संकेत मिलता है।चूंकि आप किसी भी शैल का उपयोग कर रहे हैं, फिर भी आप "हैलो, $ NAME \ n" –
प्रिंट कर सकते हैं असल में,% s का उपयोग करना संभवतः सुरक्षा और शुद्धता कारणों के लिए एक अच्छी आदत है। printf प्रारूप प्रति स्ट्रिंग में \ प्रतिस्थापन और अन्य सामान करेगा, इसलिए जब संभव हो तो चर से बाहर रखें। –