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
이 두 진술이 실제로 "동일하게"작동하지 않는다는 것은 매우 미쳤다 . 말 그대로 머리를 감쌀 수 없습니다! 나는 그 당시 쉘 디자이너들이 담배를 피우는 담배를 피워야한다.
—
alex grey
조심스럽게,이 이야기에는 처음 등장한 것보다 더 많은 것이 있습니다. 나는 당신이 내 대답을 확인하도록 초대합니다.
—
jasonleonhard
다른 사람이 언급하지는 않았지만 두 가지 형식 모두 do / done을 생략 할 수 있습니다 :
—
John P
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
작동하고 질문의 시작 부분에 열거 한 첫 번째 구문과 일치합니다.