आप अपने '=' पर हस्ताक्षर के साथ स्पेस नहीं हो सकता।
जब आप लिखें:
STR =foo
:
STR = "foo"
बैश 2 तर्कों (तार '=' और 'foo')
जब आप लिखने के साथ एसटीआर नाम के एक आदेश को चलाने के लिए कोशिश करता है
बैश 1 तर्क (स्ट्रिंग '= foo') के साथ एसटीआर नामक कमांड चलाने की कोशिश करता है
जब आप wr ite:
STR= foo
बैश अपने पर्यावरण में खाली स्ट्रिंग पर एसटीआर सेट के साथ कमांड foo चलाने की कोशिश करता है।
मैं या अगर यह स्पष्ट करने के लिए मदद करता है यकीन नहीं है अगर यह मात्र कहानियो है, लेकिन ध्यान दें कि:
- पहले आदेश के लिए बिल्कुल बराबर है:
STR "=" "foo"
,
- दूसरे रूप में ही है
STR "=foo"
,
- और अंतिम
STR="" foo
के बराबर है।
sh language spec, section 2.9.1 राज्यों के प्रासंगिक अनुभाग:
ए 'साधारण आदेश "किसी भी क्रम में, वैकल्पिक चर कार्य और पुनर्निर्देशन का क्रम है, वैकल्पिक रूप से, शब्द और पुनर्निर्देशन के बाद एक नियंत्रण द्वारा समाप्त ऑपरेटर।
उस संदर्भ में, word
वह आदेश है जो बैश चलाने जा रहा है। =
(स्ट्रिंग की शुरुआत के अलावा किसी भी स्थिति में) जो कोई रीडायरेक्शन नहीं है, एक वैरिएबल असाइनमेंट है, जबकि कोई भी स्ट्रिंग जो रीडायरेक्शन नहीं है और इसमें =
कोई कमांड नहीं है। STR = "foo"
में, STR
एक परिवर्तनीय असाइनमेंट नहीं है।
स्रोत
2010-02-15 18:34:40
मुझे खुशी है कि आपने सवाल पूछा था, आप वहां केवल एकमात्र बैश नोब नहीं हैं! –
उस प्रश्न पूछने के लिए धन्यवाद। यह शर्मिंदा होने का सवाल नहीं है। मैं कार्यालय में देर रात काम कर रहा हूं और इसका उत्तर देने के लिए मेरे आस-पास कोई बैश विशेषज्ञ नहीं है। –
इन दिनों (लगभग सात साल बाद!) एक एफओएसएस लिटर/विश्लेषक है जिसे [शेलचेक] (http://www.shellcheck.net) कहा जाता है जो इस और अन्य सामान्य वाक्यविन्यास मुद्दों को स्वत: पता लगाएगा। इसका उपयोग ऑनलाइन या ऑफलाइन स्थापित किया जा सकता है और आपके संपादक में एकीकृत किया जा सकता है। –