मैंने देखा है कि zsh में छोरों के निर्माण के दो वैकल्पिक तरीके हैं :
for x (1 2 3); do echo $x; done
for x in 1 2 3; do echo $x; done
वे दोनों प्रिंट करते हैं:
1
2
3
मेरा सवाल है, दो वाक्यविन्यास क्यों? क्या उनमें से प्रत्येक में $x
एक अलग प्रकार की वस्तु के माध्यम से पुनरावृति होती है ?
क्या बैश एक समान अंतर बनाता है?
परिशिष्ट:
निम्न कार्य क्यों करता है: "
#!/bin/zsh
a=1
b=2
c=5
d=(a b c)
for x in $d; do print $x;done
लेकिन यह एक नहीं है ?:
#!/bin/zsh
a=1
b=2
c=5
d=(a b c)
# It complains with "parse error near `$d'"
for x $d; do print $x;done
for i ({0..4..2}) for j ({a..c}) echo "($i,$j)"
= {0,2,4}x{a,b,c}
। अर्धविराम सबसे बाहरी लूप पर लागू होते हैं और अंतरनिर्देश पर पुनर्निर्देशन लागू होता है, और यदि आपको इसे बदलने की आवश्यकता है, तो आपको केवल ब्रेस की आवश्यकता है: for i ({0..4..2}) { for j ({a..c}) echo "($i,$j)" } | cat -n
= {1,...,9}*({0,2,4}x{a,b,c})
। बेशक आप zsh विस्तार के साथ छोरों को जोड़ सकते हैं:for i ("("{0..4..2}","{a..c}")") echo $i
for x ($d); do print $x; done
काम करेगा, और यह आपके प्रश्न की शुरुआत में पहले सिंटैक्स से मेल खाएगा।