एक पंक्ति में फ़ंक्शन लिखें ~ / .bashrc


40

जब मैं .bashrcफ़ाइल में केवल एक पंक्ति में फ़ंक्शन लिखने का प्रयास करता हूं ,

list(){ ls -a }

मुझे त्रुटि मिलती है?

bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file

लेकिन जब मैं इसे मल्टी लाइन में लिखता हूँ तो यह ठीक है?

list(){
    ls -a
}

स्टैक ओवरफ्लो पर एक बाद, बराबर सवाल है ।
— sampablokuper

जवाबों:


33

कार्य bashको अनिवार्य रूप से यौगिक कमांड (या कोड ब्लॉक) नाम दिया गया है। से man bash:

Compound Commands
   A compound command is one of the following:
   ...
   { list; }
          list  is simply executed in the current shell environment.  list
          must be terminated with a newline or semicolon.  This  is  known
          as  a  group  command. 

...
Shell Function Definitions
   A shell function is an object that is called like a simple command  and
   executes  a  compound  command with a new set of positional parameters.
   ... [C]ommand is usually a list of commands between { and },  but
   may  be  any command listed under Compound Commands above.

कोई कारण नहीं दिया गया है, यह सिर्फ वाक्यविन्यास है।

चूँकि दी गई एक-लाइन फ़ंक्शन की सूची को एक नई लाइन या ए के साथ समाप्त नहीं किया गया है ;, bashशिकायत करता है।


42

;फ़ंक्शन के अंत में एक आवश्यकता है:

list(){ ls -a ; }

कार्य करना चाहिए।

बैश के लिए एक फ़ंक्शन परिभाषा का सिंटैक्स इस प्रकार निर्दिष्ट किया गया है

name () { list ; }

ध्यान दें कि इसमें वह शामिल है ;जो इसका हिस्सा नहीं है list।

;इस जगह की आवश्यकता है कि एक वाक्यविन्यास विसंगति की तरह है। यह bashविशिष्ट नहीं है , यह इसके लिए समान है ksh, लेकिन इसमें ;आवश्यक नहीं है zsh।


18

एकल कमांड का अंत (";") न्यूलाइन द्वारा निहित है। ऑनलाइन संस्करण में बिना आदेश के }एक तर्क के रूप में पार्स किया जाता है ls -a। जो आप देख सकते हैं यदि आप करते हैं:

$ foo(){ echo "a" }
}
$ foo
a }

देखते हैं कि फ़ंक्शन डिक्लेरेशन के अंदर कमांड कैसे कर्लिंग ब्रेस को निगलती है?


2
महान व्याख्या! तो यह है नहीं बस एक वाक्य रचना विसंगति; वास्तव में इसके कुछ तर्क हैं।
— डॉन हैच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.