बैश स्क्रिप्ट फ़ंक्शन नाम जिसमें डबल कोलन '::' है


17

मुझे आज एक बाश स्क्रिप्ट मिली, जिसमें डबल कॉलन के साथ फ़ंक्शन नाम ::हैं, जैसे, 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को स्टडआउट करने के लिए।


वे अनुमति हो - stackoverflow.com/questions/44558080/...
SLM

एक %%समारोह में नाम भी देख सकते हैं unix.stackexchange.com/questions/401166/…
michael

लिंक के लिए धन्यवाद। अजीब। पोस्ट करने से पहले मैंने "बैश डबल कोलोन" (w / o उद्धरण चिह्नों के लिए खोजा) लेकिन कुछ भी नहीं मिला। पहले से ही पूछे गए प्रश्न को फिर से पूछने के लिए माफी। ।
जिम फिशर

जवाबों:


16

यह दस्तावेज़ीकरण के कार्यान्वयन की तुलना में सख्त होने का मामला है, संभवतः फुटगन कारक को कम करने के प्रयास में। इससे पहले यहां चर्चा की गई है ; यह भी देखें कि थकावट का परीक्षण करने वाला उदाहरण के [}{लिए एक मान्य फ़ंक्शन नाम है।

यह भी ध्यान देने योग्य हो सकता है कि abc::defमान्य चर नाम नहीं है:

$ abc::def=foo
bash: abc::def=foo: command not found

4
बस इसे स्पष्ट रूप से स्पष्ट करने के लिए - file::read[}{तो वैध पॉज़िक्स है
स्टीवन पेनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.