2011-11-16 18 views
6

में समारोह नाम प्राप्त मैं प्रवेश के प्रयोजनों के लिए, समारोह के भीतर से समारोह नाम प्राप्त करना चाहते हैं।के शेल स्क्रिप्ट

के शेल (ksh) समारोह:

foo() 
{ 
    echo "get_function_name some useful output" 
} 

वहाँ $0 के लिए इसी तरह कुछ भी है, जो स्क्रिप्ट के भीतर स्क्रिप्ट नाम देता है, लेकिन जो बजाय एक समारोह का नाम प्रदान करता है?

+0

विषय से संबंधित नहीं इस सवाल का: बैश के लिए, [FUNCNAME] (http://www.gnu.org/software/bash/manual/bashref.html#index-FUNCNAME-193) सरणी चर का उपयोग करें। –

उत्तर

5

उपयोग ksh "समारोह foo ..." प्रपत्र:

$ cat foo1 
#!/bin/ksh 
foo3() { echo "\$0=$0"; } 
function foo2 { echo "\$0=$0"; } 
foo2 
foo3 
$ ./foo1 
$0=foo2 
$0=./foo1 
9

आप function कीवर्ड के साथ समारोह निर्धारित करते हैं तो $0 समारोह का नाम है:

$ function foo { 
>  echo "$0" 
> } 
$ foo 
foo 

(pdksh में परीक्षण किया गया।)

+0

सही, ठीक काम करता है! कीवर्ड फ़ंक्शन का उपयोग करने के मुख्य पेशेवर/विपक्ष क्या हैं? मेरे घर पर लोगों ksh88 (पक्का बताना मुश्किल) का उपयोग करने लगते हैं, लेकिन मैं स्क्रिप्ट – Dima

+0

भीतर एक भी समारोह कीवर्ड @Dima नहीं देखा था: 'function' यह एक कॉर्न खोल समारोह है, जो एक' $ 0' है बनाता है। सिस्टम वी/पॉज़िक्स संगतता के लिए दूसरा रूप मौजूद है। –

5

[...] मुख्य पेशेवरों/कीवर्ड समारोह का उपयोग करने का विपक्ष क्या हैं?

मुख्य समर्थक यह है कि फ़ंक्शन के अंदर "टाइपसेट myvar = abc" फ़ंक्शन के बाहर कोई संभावित साइड इफेक्ट्स के साथ एक स्थानीय चर है। यह बड़े शैल स्क्रिप्ट के लिए केएसएच को काफी सुरक्षित बनाता है। मुख्य con, शायद, गैर पॉसिक्स वाक्यविन्यास है।

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