एक पंक्ति में फ़ंक्शन लिखें ~ / .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.