`] का टोकन पहचानकर्ता क्या है?


9

बैश मैनुअल कहते हैं:

जब [प्रपत्र का उपयोग किया जाता है, तो कमांड का अंतिम तर्क] होना चाहिए।

$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found

तो ]एक आरक्षित शब्द नहीं है, न ही यह एक ऑपरेटर है, और न ही यह एक अंतर्निहित आदेश है।

टोकन के रूप में, टोकन पहचानकर्ता क्या है ]? शब्द या नाम?


4
वास्तव में, [एक आत्मनिर्भर कमांड है: -rwxr-xr-x 1 रूट रूट 39552 Dec 3 18:14 / usr / bin / [हालांकि यह संभव है कि "समानांतर" बिल्ट-इन भी हो, जैसे कि इसके लिए है उदाहरण के लिए kill। कुछ सिस्टम पर, testकमांड एक प्रतीकात्मक लिंक है [या इसके विपरीत। AFAIK, ]अपने आप से कुछ भी मतलब नहीं है, लेकिन एक "बंद" करने के लिए स्वीकार किया जाता है [- लेकिन यह "सौंदर्यवादी" कारण के लिए अधिक है।
बार्ड कोपरपुड

5
शेल भाषा पिछले 46 वर्षों में परत दर परत बढ़ी है, और आंतरिक स्थिरता कभी प्राथमिकता नहीं थी। यदि आप इसे किसी भी प्रकार के सैद्धांतिक औपचारिक-भाषा के ढांचे में ढालने की कोशिश करते हैं, तो आपके लिए बुरा समय होगा।
zwol

चूंकि [(भी) एक स्व-निहित कमांड है, यह आमतौर पर एक मैन-पेज मिला ... इसलिए कोशिश करें man [और / या man test( [और testएक ही कमांड हो सकती है)।
बारोप कोपरुड

]सिंगल या डबल कोट्स में चिपके रहने की कोशिश करें और आप देखेंगे कि इससे कोई फर्क नहीं पड़ता; यह सिर्फ एक तार है।
वाइल्डकार्ड

जवाबों:


21

]पूरक [, यह [कमांड का समापन संकेत है ।

जैसा कि manपृष्ठ बताता है, यह वास्तव में एक तर्क है [, लेकिन [विशेष रूप से इसे समाप्त करने के रूप में माना जाता है।

आप कुछ अन्य आदेश समापन पैटर्न के साथ यह सदृश कर सकते हैं, उदाहरण के लिए ;में find .. exec


धन्यवाद। टोकन प्रकार / पहचानकर्ता क्या है ]?
टिम

8
@ टिम ]इस संदर्भ में किसी अन्य सामान्य चरित्र से अलग नहीं है (एक कमांड के तर्क के रूप में)। testआदेश में यह विशेष रूप से, लेकिन उस आदेश पर निर्भर है व्यवहार करता है।
मुरु १६'१६ को

6
यह सिर्फ एक स्ट्रिंग है, और [एक त्रुटि उठाता है अगर इसका अंतिम तर्क इसके बराबर नहीं है ]
चेपनर

19

बैश वर्णमाला के एक अक्षर से अलग [या ]अपने दम पर वर्णों (अपने दम पर) का इलाज नहीं करता है।

इस मामले में बैश एक "शब्द" देखता है [, और उस नाम के साथ एक कमांड ढूंढता है। यदि आप अपने फाइल सिस्टम में देखते हैं, तो आप शायद पाएंगे कि /bin/[(या /usr/bin/[) एक निष्पादन योग्य फ़ाइल के रूप में मौजूद है। जैसा कि होता है, बैश भी एक अंतर्निहित संस्करण (दक्षता के लिए) प्रदान करता है, लेकिन यह सिर्फ एक कार्यान्वयन विवरण है।

[(के रूप में, उस नाम के साथ निष्पादन योग्य) आदेश, एक नियम है कि पिछले पैरामीटर आप इसे पारित किया जाना चाहिए है ]वरना यह एक त्रुटि फेंकता है। यह आंशिक रूप से हो सकता है क्योंकि यह सौंदर्यवादी रूप से मनभावन है, लेकिन यह आपको गलती से काटे गए आदेशों से बचाने के लिए भी कार्य करता है, जो अच्छा है।

तथ्य यह है कि ये विशेष नहीं हैं , इसलिए आप पहले [या बाद में सफेद स्थान को छोड़ नहीं सकते हैं ]


अपवाद :

  • जब [और ]एक ही शब्द के भीतर सही स्वरूप में पाए जाते हैं, जैसे [a-z], तो वह है विशेष और पार्टी के ग्लोबिंग नियम लागू होते हैं।
  • [[आदेश है विशेष और कई कार्य कर सकता [नहीं कर सकते हैं (और पैरामीटर के अंदर [[ .. ]]अलग ढंग से कार्रवाई की जाती है, जैसा कि कुछ लाइन ब्रेक कर रहे हैं)। संबंधित ]]भी विशेष है, क्योंकि यह एक शेल आरक्षित शब्द है जो कमांड नाम नहीं हो सकता है, और [[कीवर्ड के बाद आने वाले विशेष प्रसंस्करण को समाप्त करता है ।

1
@JacobKrall यह एक विशेष चरित्र की तरह नहीं है ;या >, यह सिर्फ एक अंतर्निहित कमांड जैसा है cd। विशेष रूप से, यदि आप टाइप करते हैं [x, तो [इसका कोई विशेष अर्थ नहीं है।
बरमार

2
@JacobKrall सभी अंतर्निहित कमांड के लिए सही है। [एक विशेष आदेश है , यह एक विशेष चरित्र नहीं है ।
बरमार

@ बरमार: मेला काफी; मैं अपनी टिप्पणियों को वापस लेता हूं।
याकूब क्राल

वास्तव में ]]से अधिक विशेष है ]। उपयोग करते समय [और ]वे केवल शब्द हैं। यदि आपने छोड़ा ]या इसे किसी भिन्न शब्द से बदल दिया, तो बैश अभी भी चलेगा [, लेकिन [एक त्रुटि उत्पन्न करेगा। हालांकि [[और ]]समय पार्स करने पर विशेष इलाज कर रहे हैं। यदि आप ]]किसी अन्य चीज़ से प्रतिस्थापित करते हैं, तो बैश एक सिंटैक्स त्रुटि की सूचना देगा। और अगर आप छोड़े गए ]]बैश हैं तो अगली लाइन की तलाश जारी रहेगी ]]
कास्परड

@kasperd उत्तर समायोजित किया गया।
अम्स

3

पिछले दो उत्तरों की तुलना में अधिक सरलता से कहने के लिए, ]यह केवल एक स्ट्रिंग है जिसे [चलाने की आवश्यकता है।


1
यह एक टिप्पणी की तरह लगता है ...
wizzwizz4

@ wizzwizz4, टिप्पणियों में ओपी से फॉलोअप सवाल दिए, मुझे लगता है कि यह सादगी वही है जिसकी उसे जरूरत थी।
वाइल्डकार्ड

@Wildcard मैं वास्तव में सहमत हूँ। इस उत्तर को उभारने के लिए मुझे कुछ लुभा रहा था, लेकिन मुझे लगा कि यह कम गुणवत्ता वाला है। (हालांकि नीचे नहीं किया!) मैं मार्कअप में सुधार करने के लिए संपादित करने जा रहा हूं।
wizzwizz4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.