जैसा कि ज्यादातर अन्य लोगों ने देखा है, "-n" का शाब्दिक अर्थ है अगर कहीं भी रखा जाए, लेकिन echoकमांड के तुरंत बाद ।
ऐतिहासिक रूप से, UNIX उपयोगिताओं सभी इस तरह थे - वे केवल कमांड नाम के तुरंत बाद विकल्पों की तलाश करते थे। यह संभवतः बीएसडी या जीएनयू था, जिसने अधिक लचीली शैली का नेतृत्व किया (हालांकि मैं गलत हो सकता है), क्योंकि अब भी पोसिक्स पुराने तरीके को सही के रूप में निर्दिष्ट करता है (दिशानिर्देश 9 देखें, और man 3 getoptलिनक्स सिस्टम पर भी )। वैसे भी, हालांकि अधिकांश लिनक्स उपयोगिताओं में इन दिनों नई शैली का उपयोग किया जाता है, कुछ होल्डआउट्स जैसे हैं echo।
Echoएक गड़बड़ी, मानकों के लिहाज से, इसमें POSIX के अस्तित्व में आने से कम से कम दो मौलिक रूप से परस्पर विरोधी संस्करण थे। एक तरफ, आपके पास एसवाईएसवी-शैली है, जो बैकस्लैश-बच गए वर्णों की व्याख्या करती है, लेकिन अन्यथा इसके तर्कों का शाब्दिक रूप से व्यवहार करती है, कोई विकल्प स्वीकार नहीं करता है। दूसरे पर, आपके पास बीएसडी-शैली है, जो एक प्रारंभिक -nमामले को एक विशेष मामले के रूप में मानता है और शाब्दिक रूप से बाकी सब कुछ आउटपुट करता है। और चूंकि echoयह बहुत सुविधाजनक है, आपके पास हजारों शेल स्क्रिप्ट हैं जो एक व्यवहार या दूसरे पर निर्भर करती हैं:
echo Usage: my_awesome_script '[-a]' '[-b]' '[-c]' '[-n]'
echo -a does a thing.
echo -b does something else.
echo -c makes sure -a works right.
echo -- DON\'T USE -n -- it\'s not finished! --
"सब कुछ का शाब्दिक व्यवहार" शब्दार्थ के कारण, echoचीजों को तोड़े बिना एक नया विकल्प जोड़ना भी असंभव है । अगर GNU ने इस पर लचीले विकल्प योजना का उपयोग किया, तो नरक ढीली हो जाएगी।
संयोग से, बॉर्न शेल कार्यान्वयन के बीच सर्वोत्तम संगतता के लिए, बजाय उपयोग करेंprintfecho ।
echoविशेष रूप से लचीले विकल्पों का उपयोग क्यों नहीं करता है, यह स्पष्ट करने के लिए अद्यतन किया गया ।
echo -n "bar""बार"echo "bar" -nदेता है , जबकि "बार-एन" देता है