2010-01-28 2 views
13

안녕하세요, 저는 Powershell 멍청이이고 이런 작은 별난 행동에 계속 걸리는 것처럼 보입니다.함수 내에서 에코를 호출하면 에코 문자열이 Powershell에서 값을 반환하도록 미리 보류합니다.

function EchoReturnTest(){ 
    echo "afdsfadsf" 
    return "blah" 
} 

$variable = EchoReturnTest 
echo ("var: " + $variable) 

이 스크립트를 실행하면이 출력으로 생성합니다 : "VAR : afdsfadsf ㅋ"

왜 함수가 단지 문자열 "ㅋ"를 반환하지 않습니다

다음은 몇 가지 테스트 코드는?

+1

그냥 추측하지만 STDOUT (즉, 어떤 에코가 출력되는지)과 반환 값이 같은 스트림으로 덤프되고있는 것처럼 보입니다. echo를 STDERR로 출력하도록 명령하여 이들을 강제로 분리시킬 수 있습니다 : echo "afdsfadsf"1> & 2; – mlathe

답변

20

먼저 PowerShell 함수는 캡처되지 않은 "출력"을 모두 반환합니다. 당신은 변수에 할당하여 출력을 캡처 할 수 있습니다 당신은 $null로 리디렉션으로 출력을 무시할 수 있습니다 예 :

$arrayList.Add("hi") > $null 

우리가 $로 리디렉션 때문이 아니라 0과 같은이 것 일반적으로 출력 뭔가 ("안녕하세요"추가 된 인덱스) null의 경우, 출력은 무시됩니다.

둘째, echo은 해당 개체를 출력 스트림에 쓰는 "Write-Output"의 별칭 일뿐입니다.

Write-Output "blah" 
return 

그래서 함수 구현이 동일합니다 : return "blah"은 동일합니다 단지 편의 당신이 그것을 고려하지 않고 호스트 콘솔에 대한 몇 가지 정보 "를 참조하십시오"하고 싶은 경우

function EchoReturnTest(){ 
    Write-Output "afdsfadsf" 
    Write-Output "blah" 
    return 
} 

당신은 다음 매개 변수가없는 경우

function EchoReturnTest(){ 
    Write-Host "afdsfadsf" 
    return "blah" 
} 

는 또한, 당신은 함수 이름 전자의 끝 부분에 괄호가 필요하지 않습니다 : 함수의 "출력"부분은 쓰기 호스트 예를 사용합니다. 지. function EchoReturnTest { return 'blah' }.

+0

의미가 있습니다. 감사합니다. – spilliton

+0

가능한 오타 : "write-output"의 별칭을 반향하지 않습니까? – zdan

+1

예. WriteObject는 최근에 내 시간을 보냈던 C#에서 cmdlet을 작성할 때 사용합니다. 그들이 이름의 일관성을 유지했으면 좋겠다. :-) –

관련 문제