जैसा कि ज्यादातर अन्य लोगों ने देखा है, "-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 ने इस पर लचीले विकल्प योजना का उपयोग किया, तो नरक ढीली हो जाएगी।
संयोग से, बॉर्न शेल कार्यान्वयन के बीच सर्वोत्तम संगतता के लिए, बजाय उपयोग करेंprintf
echo
।
echo
विशेष रूप से लचीले विकल्पों का उपयोग क्यों नहीं करता है, यह स्पष्ट करने के लिए अद्यतन किया गया ।
echo -n "bar"
"बार"echo "bar" -n
देता है , जबकि "बार-एन" देता है