वहाँ कई सवाल/मुद्दों यहाँ हैं, इसलिए मैं पोस्टर के पाठ के प्रत्येक अनुभाग दोहराने की आवश्यकता होगी , ब्लॉक-उद्धृत, और मेरी प्रतिक्रिया के बाद।
पसंदीदा वाक्यविन्यास क्या है, और क्यों? या वे बहुत अधिक विनिमय योग्य हैं?
मैं कहूंगा कि $(some_command)
फ़ॉर्म `some_command`
फ़ॉर्म पर पसंदीदा है। बैकक्वॉट्स ("` "चरित्र, जिसे बैकटिक और कब्र उच्चारण भी कहा जाता है) का दूसरा रूप, इसे करने का ऐतिहासिक तरीका है। डॉलर का चिह्न और कोष्ठक का उपयोग करने वाला पहला रूप, एक नया पॉज़िक्स रूप है, जिसका अर्थ यह है कि यह संभवतः इसे करने का एक और मानक तरीका है। बदले में, मुझे लगता है कि इसका मतलब है कि अलग-अलग गोले और विभिन्न * निक्स कार्यान्वयन के साथ सही तरीके से काम करने की संभावना है।
पहला (पीओएसआईक्स) फॉर्म पसंद करने के लिए दिया गया एक अन्य कारण यह है कि इसे पढ़ना आसान है, खासकर जब कमांड प्रतिस्थापन घोंसला जाता है। इसके अलावा, बैकटिक फॉर्म के साथ, बैकटिक पात्रों को नेस्टेड (आंतरिक) कमांड प्रतिस्थापन में बैकस्लैश-बच निकलना पड़ता है।
पॉज़िक्स फॉर्म के साथ, आपको ऐसा करने की आवश्यकता नहीं है।
जहां तक वे विचलित होते हैं, ठीक है, मैं कहूंगा कि सामान्य रूप से, वे अलग-अलग वर्णों के लिए उल्लिखित अपवादों के अलावा, एक दूसरे के बदले में बदल सकते हैं। हालांकि, मुझे नहीं पता और यह नहीं कह सकता कि सभी आधुनिक शैल और सभी आधुनिक * निक्स दोनों रूपों का समर्थन करते हैं या नहीं। मुझे संदेह है कि वे करते हैं, खासकर पुराने गोले/पुराने * निक्स। अगर मैं आप थे, तो मैं बिना किसी खोल/* निक्स कार्यान्वयन पर प्रत्येक फॉर्म के कुछ त्वरित, सरल परीक्षणों को चलाने के बिना इंटरचेंजबिलिटी पर निर्भर नहीं रहूंगा, जिसे आप अपनी तैयार स्क्रिप्ट चलाने की योजना बना रहे हैं।
मैं पहले का पक्ष लेता हूं, क्योंकि मेरे टेक्स्ट एडिटर को यह पता चलता है कि यह क्या है, और सिंटैक्स उचित रूप से हाइलाइट करता है।
यह दुर्भाग्यपूर्ण है कि आपका संपादक POSIX फ़ॉर्म का समर्थन नहीं करता है; हो सकता है कि आपको यह देखने के लिए जांच करनी चाहिए कि आपके संपादक में कोई अपडेट है या नहीं, जो इसे करने के POSIX तरीके का समर्थन करता है। शायद लंबे शॉट, लेकिन कौन जानता है? या, शायद आपको एक अलग संपादक की कोशिश करने पर भी विचार करना चाहिए।
जीजीजी, आप किस पाठ संपादक का उपयोग कर रहे हैं ???
मैंने यहां पढ़ा है कि प्रत्येक मामले में बच निकले चरित्र अलग-अलग कार्य करते हैं, लेकिन यह मुझे स्पष्ट नहीं है कि कौन सा व्यवहार बेहतर है, या अगर यह स्थिति पर निर्भर करता है।
मैं कहूंगा कि यह उस पर निर्भर करता है जो आप पूरा करने की कोशिश कर रहे हैं; दूसरे शब्दों में, चाहे आप कमांड प्रतिस्थापन के साथ बच निकले वर्णों का उपयोग कर रहे हों या नहीं।
साइड प्रश्न: क्या एक स्क्रिप्ट में दोनों रूपों का उपयोग करना बुरा अभ्यास है, उदाहरण के लिए जब कमांड प्रतिस्थापन घोंसला करते हैं?
अच्छा, यह स्क्रिप्ट को पढ़ने के लिए थोड़ा आसान बना सकता है (टाइपोग्राफ़िक रूप से बोल रहा है), लेकिन समझना मुश्किल है! कोई आपकी स्क्रिप्ट पढ़ रहा है (या आप इसे छह महीने बाद पढ़ रहे हैं!) शायद आश्चर्य होगा कि आपने एक फॉर्म या दूसरे के साथ क्यों नहीं चिपकाया - जब तक आप टिप्पणियों में ऐसा क्यों नहीं करते हैं, इस बारे में कुछ प्रकार का नोट नहीं देते। इसके अलावा, एक स्क्रिप्ट में दोनों रूपों को मिलाकर उस स्क्रिप्ट को पोर्टेबल होने की संभावना कम हो जाएगी: स्क्रिप्ट को ठीक तरह से काम करने के लिए, इसे खोलने वाले खोल को दोनों रूपों का समर्थन करना होगा, न केवल एक रूप या दूसरा।
शैल स्क्रिप्ट को समझने योग्य बनाने के लिए, मैं व्यक्तिगत रूप से किसी भी एक स्क्रिप्ट में चिपकना पसंद करता हूं, जब तक अन्यथा ऐसा करने का कोई अच्छा तकनीकी कारण न हो। इसके अलावा, मैं पुराने रूप में POSIX रूप पसंद करूंगा; फिर भी, जब तक अन्यथा करने के लिए कोई अच्छा तकनीकी कारण न हो।
कमांड प्रतिस्थापन के विषय पर और इसे करने के लिए दो अलग-अलग रूपों के लिए, मेरा सुझाव है कि आप रॉबिन द्वारा ओ'रेली पुस्तक "क्लासिक शैल स्क्रिप्टिंग", दूसरे संस्करण में कमांड प्रतिस्थापन पर अनुभाग देखें। बीबे। उस खंड में, लेखकों का कहना है कि कमांड प्रतिस्थापन के लिए POSIX फॉर्म "सभी नए विकास के लिए अनुशंसित है।" मेरे पास इस पुस्तक में कोई वित्तीय रुचि नहीं है; शेल स्क्रिप्टिंग पर यह सिर्फ एक है (और प्यार), हालांकि यह मध्यवर्ती या उन्नत शैल स्क्रिप्टिंग के लिए अधिक है, और वास्तव में शेल स्क्रिप्टिंग शुरू करने के लिए नहीं है।
-बी।
एक पक्ष नोट के रूप में: उदाहरण के काम नहीं करता है :) आप का उपयोग करना चाहिए: गूंज "हैलो, $ (Whoami)" '!' (विस्मयादिबोधक चिह्न के उपयोग के कारण) – rmuller
@rmuller, उदाहरण के परीक्षणों के लिए मुझे यही मिलता है। इसे एक अवधि में बदल दिया। :) –