ฉันได้สังเกตว่ามีสองวิธีในการสร้างลูปใน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
จะใช้งานได้และจะจับคู่กับไวยากรณ์แรกที่คุณระบุเมื่อเริ่มต้นคำถาม