2009-03-01 2 views
2

여기 내 코드는 다음과 같습니다.

# hi.ps1 

function fun 
{ 
    Write-Host $args 
} 

Write-Host '---------------' 
Write-Host $args 
Write-Host '---------------' 
fun 
Write-Host '---------------' 

이것은 출력입니다.

PS C:\scratch> .\hi there jim 
--------------- 
there jim 
--------------- 

--------------- 

제 질문은 왜 $ args가 재미 있지 않습니까?

답변

1

$ args에는 "스크립트"범위가있는 것으로 보입니다. 로컬, 글로벌 및 스크립트의 세 가지 범위가 있습니다. 함수가 다음과 같이 변경되면

:

function fun 
{ 
    Write-Host $script:args 
} 

는 그 다음 작동합니다. "script :"는 범위 분석 연산자입니다 (기본값은 "local :"입니다). 나는 그 결과를 다소 실험적으로 발견했다. 그리고 나는 스크립트 범위가 정확히 무엇인지 알 수 없다. 그러나 스크립트 범위의 변수는 어떤 식 으로든 스크립트 자체에 속하는 것으로 보인다.

편집 : 나는 내 문제를 해결 무엇 때문에 최선의 하나로서 내 자신의 대답을 수락뿐만 아니라 몇 가지 유용한 정보를 다른 답변과 의견을 참조하고 있습니다.

2

$ powershell에 대한 나의 이해에서, $ args는 현재 함수에 대한 인수를 참조합니다. Write-Host를 처음 호출하면 $ args는 최상위 인수를 참조합니다. 재미있게 말하면, 재미 있지 않은 인자에 대해 언급하고 있습니다.

변수에 대한 자세한 내용은 PowerShell Variables을 참조하십시오.

+0

괜찮은 것 같지만 옳지 않을 수 있습니다. 인수를 취하기 위해 fun를 수정하면 Write-Host는 여전히 출력을 생성하지 않습니다. –

+0

아, $ args는 실제로 함수 인수를 참조하지만 함수에 매개 변수 목록 (예 : function ($ x) {...})이 있으면 $ args가 할당되지 않을 것으로 생각됩니다. 다소 반 직관적입니다. –

+1

$ args의 목적을 오해하고 있다고 생각합니다. $ args는 "캐치되지 않은"인수를 저장합니다. 스크립트 또는 함수에서 매개 변수를 정의하면 PowerShell은 인수를 인수에 바인딩하려고 시도합니다. 바인드 할 수없는 것은 $ args로 끝납니다. – JasonMArcher

4

스크립트 파일을 함수처럼 생각하십시오. 함수 본문은 스크립트 내용이고 함수 이름은 스크립트 파일 이름입니다. 스크립트에 인수를 전송하면 스크립트 내용에서 사용할 수 있습니다. $ args는 함수 내에서 함수에 접근 할 수 있습니다.

는 예를 들어 다음과 같은 보자.

# \ 테스트 args.ps1을

함수 foo { "인쇄 기능`$ 인수 $ 인수"호스트 쓰기}

# 인쇄 스크립트 인수

"$ 인수 인쇄 스크립트`$ 인수"

# 인쇄 기능의 인수

foo는 안녕하세요 세계 ... 호스트 쓰기

# 스크립트 끝
+0

예. $ args는 $ _와 (과) 같은 종류의 행동을 생각할 수 있습니다. 그것은 당신이 그것을 사용하고있는 맥락에 중요합니다. – JasonMArcher

+0

$ args는 func에 명명 된 params가 없거나 인수 count가 -gt 인 params count 인 경우에 사용할 수 있습니다. 즉, 2 개의 params로 func가 있고 4 개의 인수를 보내는 경우 $ args에 마지막 2가 포함됩니다. –

0
$MyInvocation.UnboundArguments 
관련 문제