वाक्यविन्यास के साथ चर को लागू करने में कोई अंतर है ${var}
और $(var)
? उदाहरण के लिए, चर को किस तरह से विस्तारित किया जाएगा या कुछ भी?
वाक्यविन्यास के साथ चर को लागू करने में कोई अंतर है ${var}
और $(var)
? उदाहरण के लिए, चर को किस तरह से विस्तारित किया जाएगा या कुछ भी?
जवाबों:
कोई अंतर नहीं है - उनका मतलब बिल्कुल वही है (जीएनयू मेक और पोसिक्स मेक में)।
मुझे लगता है कि $(round brackets)
टिडियर दिखते हैं, लेकिन यह सिर्फ व्यक्तिगत पसंद है।
(अन्य उत्तर GNU मेक डॉक्युमेंट के संबंधित अनुभागों की ओर इशारा करते हैं, और ध्यान दें कि आपको सिंटैक्स को एक ही एक्सप्रेशन में नहीं मिलाना चाहिए)
deploy: ${DEPS}
मेरे लिए एक सिंटैक्स त्रुटि के रूप में हाइलाइट किया, लेकिन deploy: $(DEPS)
सही होने के बावजूद दोनों स्पेलिंग का प्रभाव समान रूप से दिखाया गया है make
।
प्रलेखन राज्य से भिन्न संदर्भ अनुभाग की मूल बातें कोई मतभेद नहीं हैं :GNU make
एक वेरिएबल का मान स्थानापन्न करने के लिए, डॉलर चिन्ह कोष्ठक या ब्रेसिज़ में चर का नाम और उसके बाद लिखें: या तो
$(foo)
या${foo}
एक मान्य संदर्भ है चर foo के लिए।
जैसा कि पहले ही सही ढंग से कहा गया है, इसमें कोई अंतर नहीं है लेकिन दो प्रकार के सीमांकक को मिश्रण नहीं करने के लिए सावधान रहना चाहिए क्योंकि यह अनियंत्रित जीएनयू जैसे क्रिप्टोकरेंसी त्रुटियों का कारण बन सकता है ।
GNU से फंक्शन कॉल सिंटैक्स पर मैनुअल करें (जोर मेरा):
[…] यदि तर्कों में स्वयं अन्य फ़ंक्शन कॉल या चर संदर्भ होते हैं, तो सभी संदर्भों के लिए एक ही तरह के सीमांकक का उपयोग करना बुद्धिमानी है; लिखो
$(subst a,b,$(x))
, नहीं$(subst a,b,${x})
। ऐसा इसलिए है क्योंकि यह स्पष्ट है, और क्योंकि संदर्भ के अंत का पता लगाने के लिए केवल एक प्रकार के सीमांकक का मिलान किया जाता है ।
वास्तव में, यह काफी अलग प्रतीत होता है:
, = ,
list = a,b,c
$(info $(subst $(,),-,$(list))_EOL)
$(info $(subst ${,},-,$(list))_EOL)
आउटपुट
a-b-c_EOL
md/init-profile.md:4: *** unterminated variable reference. Stop.
लेकिन अभी तक मुझे केवल यही अंतर मिला था जब चर नाम $ {...} में स्वयं एक अल्पविराम था। मैंने पहले सोचा था कि $ {...} मूल्य के रूप में अल्पविराम का विस्तार नहीं कर रहा था, लेकिन यह इस तरह से मुझे हैक करने में सक्षम नहीं है। मुझे अभी भी यह समझ में नहीं आया है ... अगर किसी के पास स्पष्टीकरण था, तो मुझे यह जानकर खुशी होगी!
$ {} शैली आपको शेल में मेक रूल्स का परीक्षण करने देती है, यदि आपके पास इसके अनुरूप वैरिएबल सेट हैं, क्योंकि यह बैश के अनुकूल है।
अगर अभिव्यक्ति में असंतुलित कोष्ठक होते हैं तो इससे फर्क पड़ता है:
${info ${subst ),(,:-)}}
$(info $(subst ),(,:-)))
->
:-(
*** insufficient number of arguments (1) to function 'subst'. Stop.
चर संदर्भों के लिए, यह फ़ंक्शंस के लिए, या चर नामों के लिए एक अंतर बनाता है जिसमें कोष्ठक (बुरा विचार) होता है
$()
मेक और शेल वैरिएबल के बीच खुद को भ्रम (पहले से मौजूद है) से बचने के लिए मेक इन का उपयोग करता हूं। GNU वेरिएबल रेफरेंस पर डॉक्यूमेंटेशन करें ।