बैश तुलना और अभिव्यक्ति ऑपरेटरों


11

मैं प्रोग्रामिंग को कोसने के लिए नया हूं। मैंने दो अच्छे, लंबे गाइड पढ़े हैं, लेकिन उन्होंने ऑपरेटरों और कीवर्ड के बारे में मेरे सिर में गड़बड़ी की है।

जो अधिक सामान्यतः और व्यापक रूप से उपयोग किए जाते हैं? मुझे नहीं पता कि कब और क्यों उपयोग करना है।

  1. test, [[ ]]या [ ]या भी(( ))
  2. $((exp)) या $[exp]
  3. -gtया >, geया >=आदि।
  4. जब उपयोग करने के लिए <और >या ( )और हम के साथ से बचने के लिए जब \: \< \(आदि
  5. ==या =(स्ट्रिंग तुलना)

मुझे पता है कि बीच के अंतर [और [[अन्य प्रश्न मेरे लिए एक रहस्य हैं।

पहले ही, आपका बहुत धन्यवाद


2
एक बहुत ही उपयोगी विकी जो आज तक है और बहुत अच्छे अभ्यास का उल्लेख करता है, ग्रेग की विकी है । बैश गाइड और एफएक्यू वहां विशेष रूप से उपयोगी हैं।

जवाबों:


5
  • testएक शेल निर्मित है जिसमें (स्पष्ट रूप से) कुछ दी गई स्थिति के लिए परीक्षण किया जाता है। कुछ पुराने गोले को एक विशेष कमांड की आवश्यकता होती है। तो आपको एक कार्यक्रम भी मिलेगा /usr/bin/test
  • [यह भी कुछ हालत के लिए परीक्षण करने के लिए एक कार्यक्रम है। इस सॉफ़्टवेयर को एक समापन ब्रैकेट भी चाहिए और आप इसे पा सकते हैं /usr/bin/[
  • [[…]]के लिए एक विकल्प है testऔर [। इसे कोर्न शेल ( ksh) के लिए विकसित किया गया था । लेकिन आप इसे बैश संस्करणों में 2 से अधिक और जेड शेल में भी पाते हैं। डबल कोष्ठक में कुछ विशेषताएं हैं:
    • शेल कोई शब्द विभाजन या फ़ाइल नाम विस्तार नहीं करता है।
    • आपको कोई उद्धरण की आवश्यकता नहीं है।
    • इसके बजाय -a(और) या -o(या) आप उपयोग कर सकते हैं &&या ||
    • और =भी बहुत कुछ कर सकता है।
  • ((…))के बराबर है let। तो मूल रूप ((expression))से के रूप में ही है let "expression"। हालाँकि, letआप एक से अधिक एक्सप्रेशन का उपयोग कर सकते हैं, लेकिन डबल ब्रेसेस केवल एक एक्सप्रेशन की अनुमति देते हैं।
  • $((…))(और भी $[…]) कुछ गणना करता है। आप शेल ब्रेसिज़ के अंदर की अभिव्यक्ति की गणना करने की कोशिश करते हैं और परिणाम के साथ अभिव्यक्ति की जगह लेते हैं। तो echo $((1+1))जाता है echo 2। तो आपके गोले नंबर 2 को प्रिंट करते हैं।

हर बार जब आप दो नंबरों की तुलना करना चाहते हैं, तो आपको विकल्प का उपयोग डैश और दो अक्षरों ( -ge, -ltआदि) के साथ करना चाहिए । यदि आप स्ट्रिंग्स की तुलना करना चाहते हैं तो आपको उपयोग करना चाहिए =या !=

भागने के संबंध में आपके प्रश्न का उत्तर देना काफी कठिन है। क्योंकि यह शेल के अलावा आपके द्वारा उपयोग किए जाने वाले सॉफ़्टवेयर पर निर्भर करता है। तो, grepऔर grep -Eअलग भागने की जरूरत है। यह भी साथ मामला है sed, awkऔर अन्य। इसलिए सबसे अच्छा विकल्प मैनपेज पर एक नज़र रखना है। कुछ समय बाद आप आदी हो जाते हैं और जानते हैं कि भागने का उपयोग कब करना है।


धन्यवाद। एक और प्रश्न - क्योंकि इसके संभव का उपयोग कर तुलना करने के लिए ((...)) - इसे और अधिक इस संस्करण का उपयोग करने के लिए आम है: अगर ((2> 1)) या इस: अगर [[2 -gt 1]]
miked

मुझे लगता है कि if [ 2 -gt 1 ]; …यह अधिक सामान्य है, क्योंकि मैं इसे शेल लिपियों में अधिक बार देखता हूं और जहां तक ​​मुझे पता है कि यह पॉसिक्स अनुपालन है।
qbi

ध्यान रखने वाली एक और बात यह है कि [अभिव्यक्ति] सत्य है यदि अभिव्यक्ति शून्य / रिटर्न का मूल्यांकन करती है, लेकिन (अभिव्यक्ति) गैर-शून्य का रिटर्न का मूल्यांकन करती है तो (अभिव्यक्ति) सही है।
जो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.