लिनक्स / यूनिक्स कमांड: expr

नाम

expr - एक अभिव्यक्ति का मूल्यांकन करें

सार

expr arg ? Arg arg ... ?

तर्कों को जोड़ता है (उनके बीच विभाजक रिक्त स्थान जोड़ना), परिणाम को टीसीएल अभिव्यक्ति के रूप में मूल्यांकन करता है, और मान देता है। टीसीएल अभिव्यक्तियों में अनुमत ऑपरेटरों को सी अभिव्यक्तियों में अनुमत ऑपरेटरों का सबसेट होता है, और उनके पास समान सी ऑपरेटरों के समान अर्थ और प्राथमिकता होती है। अभिव्यक्ति लगभग हमेशा संख्यात्मक परिणाम उत्पन्न करती हैं (पूर्णांक या फ़्लोटिंग-पॉइंट मान)। उदाहरण के लिए, अभिव्यक्ति

एक्सपीआर 8.2 + 6

14.2 का मूल्यांकन टीसीएल अभिव्यक्ति सी अभिव्यक्तियों से अलग होती है जिस तरह से ऑपरेंड निर्दिष्ट होते हैं। इसके अलावा, टीसीएल अभिव्यक्ति गैर-संख्यात्मक संचालन और स्ट्रिंग तुलना का समर्थन करते हैं।

ऑपरेंड

एक टीसीएल अभिव्यक्ति में ऑपरेंड, ऑपरेटरों और कोष्ठक का संयोजन होता है। ऑपरेशन और ऑपरेटरों और कोष्ठक के बीच सफेद स्थान का उपयोग किया जा सकता है; अभिव्यक्ति के निर्देशों से इसे अनदेखा किया जाता है। जहां संभव हो, ऑपरेटरों को पूर्णांक मान के रूप में व्याख्या किया जाता है। इंटीजर मानों को दशमलव (सामान्य मामला) में, ऑक्टल में निर्दिष्ट किया जा सकता है (यदि ऑपरेंड का पहला अक्षर 0 है ), या हेक्साडेसिमल में (यदि ऑपरेंड के पहले दो अक्षर 0x हैं )। यदि किसी ऑपरेंड में ऊपर दिए गए पूर्णांक प्रारूपों में से एक नहीं है, तो यह संभव है तो इसे फ़्लोटिंग-पॉइंट नंबर के रूप में माना जाता है। एएनएसआई-अनुपालन सी कंपाइलर द्वारा स्वीकार किए गए किसी भी तरीके में फ़्लोटिंग-पॉइंट नंबर निर्दिष्ट किए जा सकते हैं (सिवाय इसके कि अधिकांश इंस्टॉलेशन में एफ , एफ , एल , और एल प्रत्यय की अनुमति नहीं दी जाएगी)। उदाहरण के लिए, निम्नलिखित सभी मान्य फ़्लोटिंग-पॉइंट संख्याएं हैं: 2.1, 3., 6e4, 7.91e + 16। यदि कोई संख्यात्मक व्याख्या संभव नहीं है, तो एक ऑपरेंड स्ट्रिंग के रूप में छोड़ा जाता है (और ऑपरेटर का केवल सीमित सेट इसे लागू किया जा सकता है)।

संचालन निम्न में से किसी भी तरीके से निर्दिष्ट किया जा सकता है:

[1]

एक संख्यात्मक मान के रूप में, या तो पूर्णांक या फ़्लोटिंग-पॉइंट।

[2]

मानक $ नोटेशन का उपयोग करते हुए, टीसीएल वैरिएबल के रूप में। चर के मूल्य का उपयोग ऑपरेंड के रूप में किया जाएगा।

[3]

डबल-कोट्स में संलग्न एक स्ट्रिंग के रूप में। अभिव्यक्ति पार्सर उद्धरण के बीच की जानकारी पर बैकस्लैश, चर, और कमांड प्रतिस्थापन करेगा, और परिणामी मान को ऑपरेंड के रूप में उपयोग करेगा

[4]

ब्रेसिज़ में संलग्न एक स्ट्रिंग के रूप में। खुले ब्रेस और मिलान करने वाले करीबी ब्रेस के बीच के पात्रों को बिना किसी प्रतिस्थापन के ऑपरेंड के रूप में उपयोग किया जाएगा।

[5]

ब्रैकेट में संलग्न एक टीसीएल कमांड के रूप में। आदेश निष्पादित किया जाएगा और इसका परिणाम ऑपरेंड के रूप में उपयोग किया जाएगा।

[6]

गणितीय फ़ंक्शन के रूप में जिनके तर्कों में ऑपरेशन के लिए उपर्युक्त रूपों में से कोई भी है, जैसे पाप ($ x) । परिभाषित कार्यों की सूची के लिए नीचे देखें।

जहां प्रतिस्थापन ऊपर होते हैं (उदाहरण के लिए उद्धृत तारों के अंदर), वे अभिव्यक्ति के निर्देशों द्वारा निष्पादित होते हैं। हालांकि, अभिव्यक्ति प्रोसेसर कहलाए जाने से पहले प्रतिस्थापन की अतिरिक्त परत पहले से ही पार्सर द्वारा निष्पादित की जा सकती है। जैसा कि नीचे चर्चा की गई है, कमांड पार्सर को सामग्री पर प्रतिस्थापन करने से रोकने के लिए ब्रेसिज़ में अभिव्यक्तियों को संलग्न करना सबसे अच्छा होता है।

सरल अभिव्यक्तियों के कुछ उदाहरणों के लिए, मान लें कि चर के पास मान 3 है और परिवर्तनीय बी के पास मान 6 है। फिर नीचे दी गई प्रत्येक पंक्ति के बाईं ओर स्थित कमांड लाइन के दाईं ओर मान का उत्पादन करेगी:

expr 3.1 + $ a6.1 expr 2 + "$ a। $ b" 5.6 expr 4 * [लम्बाई "6 2"] 8 expr {{word one} <"word $ a"} 0

ऑपरेटर्स

वैध ऑपरेटरों को नीचे सूचीबद्ध किया गया है, प्राथमिकता के घटते क्रम में समूहित:

- + ~!

यूनरी माइनस, यूनरी प्लस, बिट-वार नहीं, तार्किक नहीं। इन ऑपरेटरों में से कोई भी स्ट्रिंग ऑपरेटरों पर लागू नहीं किया जा सकता है, और बिट-वार न केवल पूर्णांक पर लागू किया जा सकता है।

* /%

गुणा करें, विभाजित करें, शेष। इन ऑपरेटरों में से कोई भी स्ट्रिंग ऑपरेंड पर लागू नहीं किया जा सकता है, और शेष केवल पूर्णांक पर लागू किया जा सकता है। शेष में हमेशा divisor के समान संकेत होगा और divisor से एक पूर्ण मूल्य छोटा होगा।

+ -

जोड़ें और घटाएं। किसी भी संख्यात्मक ऑपरेटरों के लिए मान्य।

<< >>

बाएं और दाएं शिफ्ट। केवल पूर्णांक ऑपरेटरों के लिए मान्य। एक सही शिफ्ट हमेशा साइन बिट का प्रचार करता है।

<> <=> =

बूलियन कम, अधिक, कम या बराबर, और इससे अधिक या बराबर। प्रत्येक ऑपरेटर 1 उत्पन्न करता है यदि स्थिति सत्य है, 0 अन्यथा। इन ऑपरेटरों को तारों के साथ-साथ संख्यात्मक ऑपरेटरों पर भी लागू किया जा सकता है, जिसमें मामले स्ट्रिंग तुलना का उपयोग किया जाता है।

==! =

बूलियन बराबर और बराबर नहीं है। प्रत्येक ऑपरेटर शून्य / एक परिणाम उत्पन्न करता है। सभी ऑपरेंड प्रकारों के लिए मान्य।

और

बिट-वार और। केवल पूर्णांक ऑपरेटरों के लिए मान्य।

^

बिट-वार अनन्य या। केवल पूर्णांक ऑपरेटरों के लिए मान्य।

|

बिट-वार या। केवल पूर्णांक ऑपरेटरों के लिए मान्य।

&&

तार्किक और। यदि 1 ऑपरेशन गैर-शून्य हैं, तो अन्यथा 1 परिणाम उत्पन्न करता है। बूलियन और न्यूमेरिक (पूर्णांक या फ़्लोटिंग-पॉइंट) के लिए मान्य केवल संचालित होता है।

||

तार्किक या। 0 परिणाम उत्पन्न करता है यदि दोनों ऑपरेटरों शून्य हैं, 1 अन्यथा। बूलियन और न्यूमेरिक (पूर्णांक या फ़्लोटिंग-पॉइंट) के लिए मान्य केवल संचालित होता है।

एक्स ? वाई : जेड

यदि-फिर-जैसे, सी में। यदि एक्स गैर-शून्य का मूल्यांकन करता है, तो परिणाम y का मान है। अन्यथा, परिणाम जेड का मान है। एक्स ऑपरेंड के पास संख्यात्मक मान होना चाहिए।

प्रत्येक ऑपरेटर द्वारा उत्पादित परिणामों पर अधिक जानकारी के लिए सी मैनुअल देखें। सभी बाइनरी ऑपरेटरों समूह एक ही प्राथमिकता स्तर के भीतर बाएं से दाएं दाएं। उदाहरण के लिए, आदेश

expr 4 * 2 <7

रिटर्न 0।

एंड , || , और?: ऑपरेटरों के पास 'आलसी मूल्यांकन' है, जैसा कि सी में है, जिसका अर्थ यह है कि अगर परिणाम निर्धारित करने के लिए उनकी आवश्यकता नहीं होती है तो ऑपरेटरों का मूल्यांकन नहीं किया जाता है। उदाहरण के लिए, कमांड में

expr {$ v? [ए]: [बी]}

$ v के मूल्य के आधार पर, केवल [ए] या [बी] का मूल्यांकन किया जाएगा। नोट, हालांकि, यह केवल तभी सच है जब संपूर्ण अभिव्यक्ति ब्रेसिज़ में संलग्न है; अन्यथा, टीसीएल पार्सर expr कमांड का आह्वान करने से पहले [ए] और [बी] दोनों का मूल्यांकन करेगा।

गणित कार्य

टीसीएल अभिव्यक्तियों में निम्नलिखित गणितीय कार्यों का समर्थन करता है:

abs cosh log sqrt acos double log10 srand asin exp pow tan atan floor rand tanh atan2 fmod round ceil hypot sin cos int sinh

पेट ( तर्क )

तर्क का पूर्ण मूल्य देता है। Arg या तो पूर्णांक या फ़्लोटिंग-पॉइंट हो सकता है, और परिणाम उसी रूप में वापस आ जाता है।

एकोस (तर्क )

रेंज [0, पीआई] रेडियंस में, तर्क के आर्क कोसाइन लौटाता है। तर्क सीमा में होना चाहिए [-1,1]।

Asin ( तर्क )

रेंज [-पीआई / 2, पीआई / 2] रेडियंस में, तर्क की आर्क साइन लौटाता है। तर्क सीमा में होना चाहिए [-1,1]।

अतान ( तर्क )

रेंज [-पीआई / 2, पीआई / 2] रेडियंस में, तर्क के आर्क टेंगेंट को वापस करता है।

atan2 ( एक्स, वाई )

श्रेणी [-पीआई, पीआई] रेडियंस में y / x की चाप टेंगेंट लौटाता है। एक्स और वाई दोनों 0 नहीं हो सकते हैं।

छत ( तर्क )

तर्क से कम नहीं, सबसे छोटा पूर्णांक मान देता है।

कॉस ( तर्क )

रेडियंस में मापा तर्क की कोसाइन देता है।

कोष ( तर्क )

तर्क के हाइपरबॉलिक कोसाइन देता है। अगर परिणाम ओवरफ्लो का कारण बनता है, तो एक त्रुटि लौटा दी जाती है।

डबल ( तर्क )

यदि तर्क एक फ़्लोटिंग मान है, तो तर्क देता है, अन्यथा अस्थायी रूप से बहस को परिवर्तित करता है और परिवर्तित मूल्य लौटाता है।

एक्सपी ( तर्क )

ई ** तर्क के रूप में परिभाषित तर्क के घातीय लौटता है । अगर परिणाम ओवरफ्लो का कारण बनता है, तो एक त्रुटि लौटा दी जाती है।

मंजिल ( तर्क )

तर्क से बड़ा नहीं सबसे बड़ा अभिन्न मूल्य देता है।

एफएमओडी ( एक्स, वाई )

एक्स द्वारा एक्स के विभाजन के फ़्लोटिंग-पॉइंट शेष को वापस करता है। यदि y 0 है, तो एक त्रुटि लौटा दी जाती है।

हाइपोट ( एक्स, वाई )

एक दाएं कोण वाले त्रिकोण ( x * x + y * y ) के hypotenuse की लंबाई की गणना करता है।

int ( तर्क )

अगर तर्क एक पूर्णांक मान है, तो तर्क देता है, अन्यथा तर्क को पूर्णांक से पूर्णांक में परिवर्तित करता है और परिवर्तित मूल्य लौटाता है।

लॉग ( तर्क )

तर्क के प्राकृतिक लघुगणक देता है। Arg एक सकारात्मक मूल्य होना चाहिए।

लॉग 10 ( तर्क )

तर्क के आधार 10 logarithm देता है। Arg एक सकारात्मक मूल्य होना चाहिए।

पाउ ( एक्स, वाई )

शक्ति वाई को उठाए गए एक्स के मान की गणना करता है। यदि एक्स नकारात्मक है, तो y एक पूर्णांक मान होना चाहिए।

रैंड ()

एक फ्लोटिंग पॉइंट नंबर शून्य से एक से कम या गणितीय शब्दों में, सीमा [0,1) देता है। बीज मशीन की आंतरिक घड़ी से आता है या एसआरएंड फ़ंक्शन के साथ मैनुअल सेट किया जा सकता है।

दौर ( तर्क )

अगर तर्क एक पूर्णांक मान है, तो तर्क देता है, अन्यथा तर्क को पूर्णांक से पूर्णांक में परिवर्तित करता है और परिवर्तित मूल्य लौटाता है।

पाप ( तर्क )

रेडियंस में मापा तर्क की साइन देता है।

sinh ( तर्क )

तर्क की हाइपरबॉलिक साइन लौटाता है। अगर परिणाम ओवरफ्लो का कारण बनता है, तो एक त्रुटि लौटा दी जाती है।

sqrt ( तर्क )

तर्क के वर्ग रूट देता है। Arg गैर-नकारात्मक होना चाहिए।

srand ( तर्क )

तर्क , जो एक पूर्णांक होना चाहिए, यादृच्छिक संख्या जेनरेटर के लिए बीज को रीसेट करने के लिए प्रयोग किया जाता है। उस बीज से पहला यादृच्छिक संख्या देता है। प्रत्येक दुभाषिया का अपना बीज होता है।

तन ( तर्क )

रेडियंस में मापा तर्क के टेंगेंट देता है।

तनह ( तर्क )

तर्क के हाइपरबॉलिक टेंगेंट देता है

इन पूर्वनिर्धारित कार्यों के अतिरिक्त, अनुप्रयोग Tcl_CreateMathFunc () का उपयोग करके अतिरिक्त कार्यों को परिभाषित कर सकते हैं।

प्रकार, ओवरफ्लो, और प्रेसिजन

पूर्णांक से जुड़े सभी आंतरिक संगणना सी प्रकार के साथ किए जाते हैं, और फ्लोटिंग-पॉइंट से जुड़े सभी आंतरिक कंप्यूटेशंस सी प्रकार डबल के साथ किए जाते हैं। एक स्ट्रिंग को फ़्लोटिंग-पॉइंट में कनवर्ट करते समय, एक्सपोनेंट ओवरफ़्लो का पता लगाया जाता है और परिणामस्वरूप टीसीएल त्रुटि होती है। स्ट्रिंग से पूर्णांक में रूपांतरण के लिए, ओवरफ्लो का पता लगाने स्थानीय सी पुस्तकालय में कुछ दिनचर्या के व्यवहार पर निर्भर करता है, इसलिए इसे अविश्वसनीय माना जाना चाहिए। किसी भी मामले में, इंटरमीडिएट परिणामों के लिए आमतौर पर पूर्णांक ओवरफ़्लो और अंडरफ्लो विश्वसनीय रूप से नहीं पहचाना जाता है। फ़्लोटिंग-पॉइंट ओवरफ्लो और अंडरफ्लो हार्डवेयर द्वारा समर्थित डिग्री के लिए पता चला है, जो आम तौर पर काफी विश्वसनीय है।

पूर्णांक, फ़्लोटिंग-पॉइंट, और स्ट्रिंग ऑपरेंड के लिए आंतरिक प्रस्तुतियों के बीच रूपांतरण स्वचालित रूप से आवश्यकतानुसार किया जाता है। अंकगणितीय गणना के लिए, पूर्णांक का उपयोग तब तक किया जाता है जब तक कि कुछ फ़्लोटिंग-पॉइंट नंबर पेश नहीं किया जाता है, जिसके बाद फ़्लोटिंग-पॉइंट का उपयोग किया जाता है। उदाहरण के लिए,

expr 5/4

1 देता है, जबकि

expr 5 / 4.0 expr 5 / ([स्ट्रिंग लंबाई "abcd"] + 0.0)

दोनों 1.25 लौटते हैं। फ़्लोटिंग-पॉइंट मान हमेशा `` के साथ वापस आते हैं '' या एक ताकि वे पूर्णांक मानों की तरह दिखाई न दें। उदाहरण के लिए,

एक्सपीआर 20.0 / 5.0

रिटर्न 4.0 , 4 नहीं।

स्ट्रिंग ऑपरेशंस

स्ट्रिंग मानों को तुलना ऑपरेटर के संचालन के रूप में उपयोग किया जा सकता है, हालांकि अभिव्यक्ति मूल्यांकनकर्ता तुलना करने के लिए पूर्णांक या फ़्लोटिंग-पॉइंट के रूप में तुलना करने की कोशिश करता है। यदि तुलना के संचालन में से एक एक स्ट्रिंग है और दूसरे के पास संख्यात्मक मान है, तो संख्यात्मक ऑपरेंड को पूर्णांक के लिए सी sprintf प्रारूप निर्दिष्ट % d और फ़्लोटिंग-पॉइंट मानों के लिए % g का उपयोग करके एक स्ट्रिंग में परिवर्तित किया जाता है। उदाहरण के लिए, आदेश

expr {"0x03"> "2"} expr {"0y" <"0x12"}

दोनों वापसी 1. पहली तुलना पूर्णांक तुलना का उपयोग करके की जाती है, और दूसरे ऑपरेंड स्ट्रिंग 18 में परिवर्तित होने के बाद स्ट्रिंग तुलना का उपयोग करके दूसरा किया जाता है। जब भी संभव हो, मूल्यों के रूप में मानों के इलाज के लिए टीसीएल की प्रवृत्ति के कारण, आम तौर पर स्ट्रिंग तुलना की तुलना में ऑपरेटरों का उपयोग करना एक अच्छा विचार नहीं है और ऑपरेंड के मूल्य मनमानी हो सकते हैं; इन मामलों में स्ट्रिंग कमांड का उपयोग करने के लिए बेहतर है।

प्रदर्शन विचार

सर्वोत्तम गति और सबसे छोटी भंडारण आवश्यकताओं के लिए ब्रेसिज़ में अभिव्यक्तियां संलग्न करें। यह टीसीएल बाइटकोड संकलक को सर्वोत्तम कोड उत्पन्न करने की अनुमति देता है।

जैसा ऊपर बताया गया है, अभिव्यक्तियों को दो बार प्रतिस्थापित किया जाता है: एक बार टीसीएल पार्सर द्वारा और एक बार expr कमांड द्वारा। उदाहरण के लिए, आदेश

एक 3 सेट बी {$ ए + 2} expr $ b * 4 सेट करें

11 लौटें, 4 में से एकाधिक नहीं। ऐसा इसलिए है क्योंकि टीसीएल पार्सर पहले वैरिएबल बी के लिए $ 2 + को प्रतिस्थापित करेगा, तो expr कमांड अभिव्यक्ति का मूल्यांकन $ + 2 * 4 करेगा

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

कीवर्ड

अंकगणित, बुलियन , तुलना, अभिव्यक्ति, अस्पष्ट तुलना

महत्वपूर्ण: यह देखने के लिए मैन कमांड ( % man ) का उपयोग करें कि आपके विशेष कंप्यूटर पर कमांड का उपयोग कैसे किया जाता है।