2015-01-16 5 views
2

왜 무한 루프에PowerShell에서 for for cycle이라는 변수를 생략하면 무한 루프가 발생하는 이유는 무엇입니까?

$i=1 
for ($i -le 5; $i++) 
{Write-Host $i} 

결과는 무엇입니까? C# 또는 다른 프로그래밍 언어로이 코드를 작성한 적이 없으므로 어떻게 동작할지 모르겠지만 "i"변수를 5로 비교하지 않고 1을 더하는 이유는 무엇입니까? 그것을 비교하고 다시 비교해 보면 합리적이고 논리적 인 인간이 아니라주기가 장님이거나 기계의 일부 형태 인 것과 같습니다.

왜 무한하고 사전 정의 된 i를 가져 오지 않는 이유는 무엇입니까? "PowerShell의 기능 때문에"쓸모가 없기 때문에 답변을 처럼 알고 싶습니다.

첫 번째 매개 변수가 누락 되었기 때문에 나는 무한합니다. 알고 싶습니다. 입니까? 대답은 철학적 인 것처럼 "철저한 이유는 무엇입니까? 그것의주기, 그러나 그것에 구체적으로 포함되어야 하는가? "

답변

4

당신은 Windows PowerShell을 언어 사양을 읽는다면, 당신은 문에 대한이 문법 볼 수 있습니다 :

for-statement: 
for new-linesopt (
     new-linesopt for-initializeropt statement-terminator 
     new-linesopt for-conditionopt statement-terminator 
     new-linesopt for-iteratoropt 
     new-linesopt ) statement-block 
for new-linesopt (
     new-linesopt for-initializeropt statement-terminator 
     new-linesopt for-conditionopt 
     new-linesopt ) statement-block 
for new-linesopt (
     new-linesopt for-initializeropt 
     new-linesopt ) statement-block 
for-initializer: 
pipeline 
for-condition: 
pipeline 
for-iterator: 
pipeline 

귀하의 예제에서, 첫 번째 문은 초기화 것을 의미합니다. 예상대로

$i=1 
for (;$i -le 5; $i++) 
{Write-Host $i} 

가 작동합니다

당신이 당신의 루프이 방법을 다시 작성하는 경우

. 추가 ";"에주의하십시오. ";"$i++ 위의 문법에 대한 조건 지속적 $ true로 평가 에 해당하므로에서, 루프가 끝나지 않아 당신은 생략하면

.

+0

내 잘못, 질문에 대한 클리어런스를 추가했습니다. – mathgenius

+0

@mathgenius 대답을 잘못 이해 한 것 같습니다. 왜냐하면'for-block' 밖에서 변수를 사용하지 않기 때문이 아니라'$ i -le 5'가 이니셜 라이저가되기 때문입니다 (그러나 어떻게되는지는 모르지만). '$ i ++'가 검사 조건이됩니다 (응답에 따라 항상 true로 평가됨), ** 세 번째 매개 변수를 비워 두는 ** (반복 조건 없음, 조건 확인시 i가 증가 함). –

+0

@AndrewT., 오, 고마워, 나는 지금 그것을 얻는다 :) – mathgenius

1

편집에서 무한하다고 알고 있지만 WHY를 알고 싶습니다. 대답은 PowerShell이 ​​자동으로 형식 변환을 수행한다는 것입니다.

값이 1 인 int 형식으로 시작하여 숫자가 증가합니다. [int]::MaxValue에 도달하고 1 씩 증가하면 int 유형은 더 이상이 값을 보유 할 수 없습니다. 그런 다음 PowerShell은 해당 형식을 자동으로 double으로 변환합니다. 예를 들어,이 시도 : 출력에서 ​​

$i=[int]::MaxValue -2 

++$i 
$i.GetType() 

++$i 
$i.GetType() 

++$i 
$i.GetType() 

++$i 
$i.GetType() 

봐, 파워 쉘은 doubleint에서 유형 변환을 참조하십시오.

double의 최대 값은 1만큼 증가하므로 루프가 끝나지 않습니다.

관련 문제