Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

कमांड लाइन आउटपुट में न्यूलाइन कैसे प्रिंट करें

हैरानी की बात यह है कि इंसानों को पढ़ने योग्य आउटपुट देने के लिए कंप्यूटर प्राप्त करना कोई आसान उपलब्धि नहीं है। मानक धाराओं और विशेष रूप से मानक आउटपुट की शुरूआत के साथ, कार्यक्रमों ने सादा पाठ धाराओं का उपयोग करके एक दूसरे से बात करने का एक तरीका प्राप्त किया। लेकिन मानवीकरण और स्टडआउट प्रदर्शित करना एक और मामला है। पूरे कंप्यूटिंग युग में प्रौद्योगिकी ने इस समस्या को हल करने की कोशिश की है, वीडियो कंप्यूटर डिस्प्ले में ASCII वर्णों के उपयोग से लेकर आधुनिक शेल कमांड जैसे echo तक और printf

ये प्रगति निर्बाध नहीं रही है। टर्मिनल पर आउटपुट को प्रिंट करने का काम प्रोग्रामर के लिए नेविगेट करने के लिए विचित्रताओं से भरा होता है, जैसा कि न्यूलाइन्स को प्रिंट करने के लिए एस्केप सीक्वेंस का विस्तार करने के भ्रामक रूप से गैर-तुच्छ कार्य द्वारा उदाहरण दिया गया है। प्लेसहोल्डर का विस्तार \n कई तरीकों से पूरा किया जा सकता है, प्रत्येक का अपना अनूठा इतिहास और जटिलताएं हैं।

echo का उपयोग करना

मल्टीिक्स में अपनी उपस्थिति से लेकर इसके आधुनिक यूनिक्स जैसी प्रणाली सर्वव्यापकता तक, echo अपने टर्मिनल को "हैलो वर्ल्ड!" कहने के लिए एक परिचित उपकरण बना हुआ है। दुर्भाग्य से, ऑपरेटिंग सिस्टम में असंगत कार्यान्वयन इसके उपयोग को मुश्किल बनाते हैं। जहां echo कुछ सिस्टम पर स्वचालित रूप से एस्केप अनुक्रमों का विस्तार होगा, अन्य को -e . की आवश्यकता होगी ऐसा करने का विकल्प:

echo "the study of European nerves is \neurology"
# the study of European nerves is \neurology

echo -e "the study of European nerves is \neurology"
# the study of European nerves is 
# eurology

कार्यान्वयन में इन विसंगतियों के कारण, echo गैर पोर्टेबल माना जाता है। इसके अतिरिक्त, उपयोगकर्ता इनपुट के संयोजन में इसका उपयोग कमांड प्रतिस्थापन का उपयोग करके शेल इंजेक्शन हमले के माध्यम से भ्रष्ट करना अपेक्षाकृत आसान है।

आधुनिक प्रणालियों में, इसे केवल उन कई कार्यक्रमों के साथ संगतता प्रदान करने के लिए रखा जाता है जो अभी भी इसका उपयोग करते हैं। POSIX विनिर्देश printf . के उपयोग की अनुशंसा करता है नए कार्यक्रमों में।

printf का उपयोग करना

यूनिक्स के चौथे संस्करण के बाद से पोर्टेबल printf कमांड अनिवार्य रूप से नया और बेहतर रहा है echo . यह आपको इनपुट को मानवीय बनाने के लिए प्रारूप विनिर्देशकों का उपयोग करने की अनुमति देता है। बैकस्लैश एस्केप अनुक्रमों की व्याख्या करने के लिए, %b use का उपयोग करें . वर्ण क्रम \n सुनिश्चित करता है कि आउटपुट एक नई लाइन के साथ समाप्त होता है:

printf "%b\n" "Many females in Oble are \noblewomen"
# Many females in Oble are 
# oblewomen

हालांकि printf इसके और विकल्प हैं जो इसे echo . का कहीं अधिक शक्तिशाली प्रतिस्थापन बनाते हैं , यह उपयोगिता फुलप्रूफ नहीं है और अनियंत्रित प्रारूप स्ट्रिंग हमले के प्रति संवेदनशील हो सकती है। प्रोग्रामर के लिए यह सुनिश्चित करना महत्वपूर्ण है कि वे उपयोगकर्ता इनपुट को सावधानीपूर्वक संभालें।

नईलाइनों को वेरिएबल में डालना

संकलकों के बीच सुवाह्यता में सुधार करने के प्रयास में, एएनएसआई सी मानक की स्थापना 1983 में की गई थी। एएनएसआई-सी के उद्धरण के साथ $'...' का उपयोग किया गया था। , एस्केप सीक्वेंस को मानक के अनुसार आउटपुट में बदल दिया जाता है।

यह हमें नई लाइनों के साथ स्ट्रिंग्स को वेरिएबल में स्टोर करने की अनुमति देता है जो कि व्याख्या की गई नईलाइन के साथ मुद्रित होते हैं। आप वैरिएबल को सेट करके, फिर इसे printf . के साथ कॉल करके ऐसा कर सकते हैं $ . का उपयोग करके :

puns=$'\number\narrow\nether\nice'

printf "%b\n" "These words started with n but don't make $puns"

# These words started with n but don't make 
# umber
# arrow
# ether
# ice

विस्तारित चर एकल-उद्धृत है, जिसे शाब्दिक रूप से printf . पर पास किया जाता है . हमेशा की तरह, इनपुट को ठीक से संभालना महत्वपूर्ण है।

बोनस राउंड:शेल पैरामीटर विस्तार

अपने लेख में बैश और ब्रेसिज़ की व्याख्या करते हुए, मैंने शेल पैरामीटर विस्तार के जादू को कवर किया। हम एक विस्तार का उपयोग कर सकते हैं, ${parameter@operator} , भागने के दृश्यों की व्याख्या करने के लिए भी। हम printf . का उपयोग करते हैं का %s एक स्ट्रिंग के रूप में प्रिंट करने के लिए निर्दिष्ट करें, और E ऑपरेटर हमारे वेरिएबल में एस्केप सीक्वेंस का ठीक से विस्तार करेगा:

printf "%s\n" ${puns@E}

# umber
# arrow
# ether
# ice

मानव में बात करने की चल रही चुनौती

प्रोग्रामर के लिए स्ट्रिंग इंटरपोलेशन एक कठिन समस्या बनी हुई है। कुछ प्लेसहोल्डर्स का क्या मतलब है, इस पर सहमत होने के लिए भाषा और शेल प्राप्त करने के अलावा, सही एस्केप सीक्वेंस का ठीक से उपयोग करने के लिए विवरण के लिए एक आंख की आवश्यकता होती है।

खराब स्ट्रिंग इंटरपोलेशन मूर्खतापूर्ण दिखने वाले आउटपुट को जन्म दे सकता है, साथ ही इंजेक्शन हमलों से सुरक्षा कमजोरियों को भी पेश कर सकता है। जब तक टर्मिनल के अगले विकास में हम इमोजीस में बात नहीं कर रहे हैं, तब तक हम मनुष्यों के लिए आउटपुट प्रिंट करते समय सबसे अच्छा ध्यान देंगे।


  1. MySQL में कमांड लाइन पर डेटाबेस कैसे बनाएं?

    सबसे पहले, आपको कमांड प्रॉम्प्ट खोलने की आवश्यकता है। आप शॉर्टकट windows+R कुंजी का उपयोग करके खोल सकते हैं। स्क्रीनशॉट इस प्रकार है - अब CMD टाइप करें और OK बटन दबाएं - अब निम्न कमांड प्रॉम्प्ट दिखाई देगा - अब MySQL बिन डायरेक्टरी में पहुँचें। स्क्रीनशॉट इस प्रकार है - डेटाबेस बनाने के

  1. कमांड लाइन में उबंटू को कैसे अपडेट करें

    कमांड लाइन में लिनक्स को अपडेट करने का तरीका जानना कुशल उपयोगकर्ताओं के लिए एक परम आवश्यक है। अपडेट रहना आपके सिस्टम को सुरक्षित, सुरक्षित और नवीनतम सुविधाओं के साथ रखता है। आज हम सीखेंगे कि टर्मिनल से या किसी एसएसएच कनेक्शन के माध्यम से उबंटू डेस्कटॉप या सर्वर को कैसे अपडेट किया जाए। आपको कमांड ला

  1. कमांड लाइन से उबंटू को कैसे अपग्रेड करें

    उबंटू का अपडेट मैनेजर आपके इंस्टॉलेशन को एक नई प्रमुख रिलीज में अपग्रेड करना अपेक्षाकृत आसान बनाता है। उपयोगिता का ग्राफिकल इंटरफ़ेस आपको चरण-दर-चरण विज़ार्ड के माध्यम से मार्गदर्शन करता है जिसका पालन करना आसान होना चाहिए। लेकिन कई बार आप ग्राफिकल यूटिलिटी का उपयोग नहीं कर सकते हैं - उदाहरण के लिए,