नीचे दिए गए आदेश में क्या गलत है
awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'
आउटपुट:
awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk: ^ syntax error
नीचे दिए गए आदेश में क्या गलत है
awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'
आउटपुट:
awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk: ^ syntax error
जवाबों:
कई अन्य प्रोग्रामिंग भाषाओं की तरह, awkअभिव्यक्ति और कथनों के बीच अंतर करता है। द्वारा और बड़े, कथनों में किए जाने वाले कार्य हैं, जबकि अभिव्यक्तियाँ अभिकलन हैं जिनका परिणाम एक मूल्य होता है।
टर्नरी ऑपरेटर awk, सी में अपने समकक्ष की तरह जहां से आता है, वह खुद एक अभिव्यक्ति है (एक बयान नहीं) जो तीन अन्य अभिव्यक्तियों की अपेक्षा करता है expr1 ? expr2 : expr3। printएक बयान है। इसका उपयोग नहीं किया जा सकता है, जहां एक अभिव्यक्ति के लिए कहा जाता है, इसलिए वाक्यविन्यास त्रुटि।
क्या आपने कोशिश की है awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'?
एक बयान का उपयोग करना जहां एक अभिव्यक्ति के लिए कहा जाता है कोई मतलब नहीं हो सकता है। मान वापस नहीं करते हैं। तो जब आपके पास है condition ? stmt1 : stmt2, तो टर्नेरी ऑपरेटर द्वारा गणना की गई कीमत क्या है? यदि conditionयह गलत है, तो इसका मूल्य होना चाहिए, stmt2लेकिन यह मूल्य नहीं है, यह एक कार्रवाई है।
x = if true; print "yes"; else; print "no"; end
(cond1) ? printf("str1") : printf("str2")? धन्यवाद त्रिगुट की सूक्ष्मता को समझाने के लिए। संपादित करें: वास्तव में, निम्नलिखित बदसूरत निर्माण का उपयोग करते हुए: str = (cond1) ? sprintf("str1") : sprintf("str2"); printf("%s", str)काम करता है, लेकिन इस बिंदु पर इसका लगभग उतना ही कॉम्पैक्ट और बहुत अधिक उपयोग करने के लिए स्पष्ट है अगर / और :)