के लिए ((…)) {…?} एक वैध शेल सिंटैक्स है? किस गोले में?


21

विस्तार:

$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4

सही ढंग से काम करता है।

मैं इस सिंटैक्स का वर्णन खोजने में विफल रहा जिसमें मैनुअल में {...;}जगह है ; do ...; done।

क्या मैनुअल में कोई संदर्भ है? किस गोले के लिए वह सही ढंग से काम करता है?


जवाबों:


30

{ ...; }70 के दशक के उत्तरार्ध में यूनिक्स V7 में बोर्न शेल के पहले संस्करण do ...; doneमें forछोरों के स्थान पर पहले ही स्वीकार कर लिया गया था ( स्रोत कोड देखें ) हालांकि अब तक मुझे पता नहीं है।

सभी ksh(दोनों मूल एक बॉर्न शेल से व्युत्पन्न, और ksh93 फिर से लिखना), from pdksh(और डेरिवेटिव), bash(1989 में शुरू से) और zshइसका समर्थन करते हैं। मुझे लगता है ashकि किसी भी व्युत्पन्न का पता नहीं है। yashया तो नहीं, लेकिन yashPOSIX मानक को लिखा गया था।

में zsh, समर्थन 1991 में 2.0 के साथ जोड़ा गया, लेकिन जो बॉर्न वाक्य रचना परे चला जाता है सबसे निर्माणों के लिए एक नया छोटे रूपों की सीमा के हिस्से के रूप। यह न केवल for i in 1 2; { ...; }, यह for i in 1 2; any-command(और इसके प्रकार) है। और यह वहां प्रलेखित है और इसकी शुरूआत के बाद से है ।

AFAIK, बगल में zsh, केवल pdksh दस्तावेज़ (दोनों के लिए ) forऔर select।

के रूप में ((init; condition; action))रूप है, कि से आता है ksh93और द्वारा कॉपी किया गया था zshऔर bash।

न तो वह ((...))और न ही POSIX { ...; }की जगह do ...; done।

यह भी देखें कि लूप के लिए बैश में "डू" कीवर्ड का उद्देश्य क्या है? अधिक forलूप रूपों के लिए।


Shell न पहले के संस्करण, न ही फोर्सिथ शेल जिस पर यह आधारित है। यह 1994 में 5.1.1 में जोड़ा गया था और शायद यह बताता है कि यह वहां क्यों प्रलेखित हुआ


1
वाह, श्री बॉर्न ने उस 70 के स्रोत कोड में सी प्रीप्रोसेसर के उपयोग को पूरी तरह से अपनाया।
— डिजिटल ट्रामा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.