किसी के लिए भी 'क्यों; चार बार करते हैं?


9

क्या यह बग है या ये कोई विशेषता है?
ऐसा लगता है कि अनछुए अल्फ़ान्यूमेरिक्स के लिए ऐसा होता है ।

रनिंग ग्नू बैश, संस्करण 4.1.5

for alpha01234; do echo $((++i)); done

उत्पादन:

1
2
3
4

जवाबों:


14

यह forयौगिक कमांड की एक विशेषता है , जैसा कि नीचे वर्णित है help for:

for: for NAME [in WORDS ... ] ; do COMMANDS; done

सूची में प्रत्येक सदस्य के लिए निष्पादित आदेश।

forपाश मदों की एक सूची में प्रत्येक सदस्य के लिए आदेशों की एक दृश्य निष्पादित करता है। अगर in WORDS ...;मौजूद नहीं है, तो in "$@"मान लिया जाता है। प्रत्येक तत्व के लिए WORDS, NAMEउस तत्व के लिए सेट किया गया है, और COMMANDSनिष्पादित हैं।

तो आपके द्वारा उद्धृत कोड संभवतः एक स्क्रिप्ट में निष्पादित किया जाता है जिसे 4 मापदंडों के साथ बुलाया गया था।


धन्यवाद ... मुझे पूरी तरह से फेंकने वाली बात यह थी कि यह कमांड लाइन पर हुआ था। मैंने वास्तव में इसे स्क्रिप्ट में आज़माया नहीं था। मैंने set a b c dहाल ही में इसका इस्तेमाल किया होगा । मैं अक्सर setपरीक्षण के लिए एक स्क्रिप्ट में इस तरह का उपयोग करता हूं .. टर्मिनल को पुनरारंभ करने के बाद, यह बंद हो गया है ... (अब समझ में आता है)
पीटर।

12

for x; do …के लिए एक शॉर्टकट है for x in "$@"; do …: यह स्थितिगत मापदंडों पर आधारित है। यदि यह चार बार लूप करता है, तो इसका मतलब है कि आपके पास चार पोजिशनल पैरामीटर ( $1थ्रू $4) हैं।

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