[powershell] PowerShell에서 $ _의 의미는 무엇입니까?

PowerShell에서 다음을 많이 보았지만 정확히 무엇을합니까?

$_



답변

이것은 파이프 라인의 현재 값에 대한 변수 $PSItem이며 Powershell 3 이상에서 호출 됩니다.

1,2,3 | %{ write-host $_ } 

또는

1,2,3 | %{ write-host $PSItem } 

예를 들어 위의 코드 %{}에서 배열의 모든 값에 대해 블록이 호출됩니다. $_또는 $PSItem변수는 현재 값을 포함합니다.


답변

C #에서 람다 식의 입력 매개 변수와 같이이 변수를 생각하는 가장 쉬운 방법은 생각합니다. 즉 $_유사하다 x에서 x => Console.WriteLine(x)C #의 익명 함수. 다음 예를 고려하십시오.

PowerShell :

1,2,3 | ForEach-Object {Write-Host $_}

인쇄물:

1
2
3

또는

1,2,3 | Where-Object {$_ -gt 1}

인쇄물:

2
3

LINQ를 사용하여 이것을 C # 구문과 비교하십시오.

var list = new List<int> { 1, 2, 3 };
list.ForEach( _ => Console.WriteLine( _ ));

인쇄물:

1
2
3

또는

list.Where( _ => _ > 1)
    .ToList()
    .ForEach(s => Console.WriteLine(s));

인쇄물:

2
3


답변

웹 사이트 에 따르면 this, 대부분의 루프에 대한 참조 입니다.

$ _ (달러 밑줄) ‘THIS’토큰. 일반적으로 foreach 루프 내부의 항목을 나타냅니다. 작업 : 컬렉션의 모든 항목을 인쇄합니다. 해결책. … | foreach {쓰기 호스트 $ _}


답변

$ _은 (는 ) 파이프의 현재 항목을 나타내는 자동 변수 $ PSItem (PowerShell V3.0에 도입 됨, 여기에서 사용 정보 참조 ) 의 별칭입니다 .

자동 변수에 대한 PowerShell (v6.0) 온라인 설명서는 여기에 있습니다 .


답변

$ _는 이전 | 객체에서 전달 된 각 객체 / 요소를 반복하는 변수입니다. (파이프).


답변

$_는 시스템에서 일반적으로 Where-Objectand와 같은 파이프와 함께 사용되는 cmdlet에서 참조하는 블록 식 내부에서 만든 변수입니다 ForEach-Object.

그러나 다른 유형의 표현식에서도 사용할 수 있습니다 (예 : Select-Object표현식 특성 과 결합). Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}. 이 경우는 $_파이프되는 항목을 나타내지 만 여러 표현식이 존재할 수 있습니다.

스크립트 블록을 사용하여 값의 유효성을 검사하는 사용자 지정 매개 변수 유효성 검사로 참조 할 수도 있습니다. 이 경우, $_는 호출에서 수신 한 매개 변수 값을 나타냅니다.

c # 및 java와 가장 유사한 것은 lamda 식입니다. powershell을 기본으로 분류하면 모든 것이 스크립트 파일 a, 함수 및 cmdlet을 포함하는 스크립트 블록입니다. 자체 매개 변수를 정의 할 수 있지만 처리 / 평가할 입력 항목을 나타내는 시스템에서 매개 변수를 생성하는 경우가 있습니다 . 이러한 상황에서 자동 변수는 $_입니다.


답변