मुझे आज एक बाश स्क्रिप्ट मिली, जिसमें डबल कॉलन के साथ फ़ंक्शन नाम ::
हैं, जैसे, file::write()
और file::read()
। मैंने बैश स्क्रिप्ट में पहले इस सिंटैक्स को कभी नहीं देखा है, और जब मैंने स्क्रिप्ट का आह्वान किया तो यह ठीक चला (मेरे आश्चर्य के लिए)।
मेरे सिस्टम (और ऑनलाइन) पर बैश के मैन पेज को छानने के बाद, मैं प्रलेखन में कुछ भी नहीं पा सकता हूं जो फ़ंक्शन नामों के लिए इस सिंटैक्स का समर्थन करता है। उदाहरण के लिए, अनुभाग Shell Defined Functions
शेल फ़ंक्शन के लिए सिंटैक्स को परिभाषित करता है
function name [()] compound-command [redirection]
और फिर (मैनुअल में कहीं और) टोकन name
के रूप में परिभाषित किया गया है
name A word consisting only of alphanumeric characters and
underscores, and beginning with an alphabetic character
or an underscore. Also referred to as an identifier.
फ़ंक्शन नामों के लिए डबल कोलोन सिंटैक्स का कहीं भी कोई उल्लेख नहीं है।
इस दोहरे कोलोन सिंटैक्स का केवल दूसरा संदर्भ जो मैंने अब तक पाया है वह इस शैल शैली गाइड (उपधारा देखें Naming Conventions > Function Names
) में है जो "पैकेज" में फ़ंक्शन नामों के लिए डबल कोलोन सिंटैक्स का उपयोग करने की सिफारिश करता है - जैसे mypackage::myfunction()
,।
क्या यह डबल कोलोन सिंटैक्स फंक्शन के लिए बैश शेल की वैध विशेषता का नाम है, या यह शायद एक अनजाने फीचर है? यदि यह वैध है, तो इसे बाश मैनुअल में कहां प्रलेखित किया गया है? मैंने देखा और देखा है, लेकिन मैं इसके बारे में कुछ भी मैनुअल में नहीं पा सकता हूं। निकटतम मैंने पाया है कि वर्तमान चर को खोज पथ में जोड़ने के लिए पर्यावरण चर ::
में उपयोग किया जाता है PATH
।
उदाहरण
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
मैंने तीन अलग-अलग लिनक्स डिस्ट्रोस पर इस स्क्रिप्ट का परीक्षण किया, और तीनों स्क्रिप्ट्स abc::def
को स्टडआउट करने के लिए।
%%
समारोह में नाम भी देख सकते हैं unix.stackexchange.com/questions/401166/…