2011-01-11 11 views
32

मैंने हमेशा सोचा कि उनका क्या उपयोग किया जाता है? मूर्खतापूर्ण लगता है कि हर बार उन्हें डालने के लिए यदि आप कभी भी उनके अंदर कुछ नहीं डाल सकते हैं।"f() {}" जैसे बैश खोल स्क्रिप्ट फ़ंक्शन परिभाषा में उपयोग किए जाने वाले कोष्ठक क्या हैं? क्या यह "फ़ंक्शन" कीवर्ड का उपयोग करने से अलग है?

function_name() { 
    #statements 
} 

इसके अलावा कुछ भी हासिल/एक समारोह के शुरू में function कीवर्ड डालने के साथ कम करने के लिए है? ताकि बैश जानता है कि यह एक समारोह परिभाषा है

function function_name() { 
    #statements 
} 

उत्तर

44

कीवर्ड functionPOSIX spec

एक समारोह के साथ पोर्टेबिलिटी के लिए function_name() के पक्ष में पदावनत किया गया है एक उपयोगकर्ता परिभाषित ऐसा नाम है जो नया स्थितीय के साथ एक यौगिक आदेश कॉल करने के लिए एक साधारण आदेश के रूप में इस्तेमाल किया जाता है पैरामीटर। एक फ़ंक्शन को "फ़ंक्शन परिभाषा कमांड" के साथ परिभाषित किया गया है।

एक समारोह परिभाषा के प्रारूप आदेश इस प्रकार है:

fname() compound-command[io-redirect ...] 

ध्यान दें कि { } अनिवार्य इसलिए यदि आप कीवर्ड function उपयोग करने के लिए नहीं जा रहे हैं नहीं कर रहे हैं (और आप नहीं करना चाहिए) तो () आवश्यक हैं इसलिए पार्सर जानता है कि आप एक फ़ंक्शन को परिभाषित कर रहे हैं।

$ myfunc() for arg; do echo "$arg"; done; myfunc foo bar 
foo 
bar 
+0

संबंधित http://stackoverflow.com/a/14652042 –

9

खाली कोष्ठकों अपने पहले उदाहरण में आवश्यक हैं (अन्यथा यह एक साधारण आदेश तरह दिखता है)। दूसरे उदाहरण में, () वैकल्पिक है क्योंकि आपने function का उपयोग किया है।

+0

आह ठीक है, अनुमान है कि समझ में आता है, यह सिर्फ पीएचपी आप में है सामग्री को कोष्ठक के अंदर रख सकते हैं, इसलिए मैं उत्सुक गीला था, मैं लिनक्स स्क्रिप्टिंग में कुछ ऐसा कर सकता था। – Mint

+2

@ मिंट: आप कोष्ठक के अंदर कुछ भी नहीं डाल सकते हैं और फ़ंक्शन को कॉल करते समय उनका उपयोग नहीं किया जाता है, लेकिन आप अभी भी फ़ंक्शन में स्थितित्मक पैरामीटर पास कर सकते हैं। 'foo() {echo" $ 1 "; }; फू हैलो –

4

function बिना उर्फ ​​विस्तार परिभाषा समय में होता है,:

उदाहरण के लिए, यह एक कानूनी समारोह परिभाषा और मंगलाचरण है। उदाहरण के लिए:

alias a=b 
# Gets expanded to "b() { echo c; }" : 
a() { echo c; } 
b 
# => c 
# Gets expanded to b: 
a 
# => c 
function साथ

हालांकि, उर्फ ​​विस्तार परिभाषा समय में नहीं होता है, तो उर्फ ​​"खाल" परिभाषा:

alias a=b 
function a { echo c; } 
b 
# => command not found 
# Gets expanded to b: 
a 
# => command not found 
unalias a 
a 
# => c 
संबंधित मुद्दे

 संबंधित मुद्दे