sourcetip

PowerShell에서 $_는 무엇을 의미합니까?

fileupload 2023. 4. 8. 09:09
반응형

PowerShell에서 $_는 무엇을 의미합니까?

PowerShell에서 다음 내용을 많이 봐왔는데 정확히 어떤 기능을 합니까?

$_

파이프라인의 현재 값에 대한 변수입니다.$PSItemPowershell 3 이후 버전.

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

또는

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

예를 들어 위의 코드에서는%{}block은 배열의 모든 값에 대해 호출됩니다.$_또는$PSItemvariable에는 현재 값이 포함됩니다.

이 변수를 C#의 람다 식에서 입력 매개 변수처럼 생각하는 가장 쉬운 방법이라고 생각합니다.$_와 유사하다xx => 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대부분 루프로 되어 있습니다.

$_ (달러 밑줄) '이건 토큰이에요.일반적으로 포어치 루프 내부의 항목을 나타냅니다.작업: 컬렉션의 모든 항목을 인쇄합니다.해결책...| { Write-Host $_}을(를) 실행합니다.

$_는 파이프의 현재 항목을 나타내는 자동 변수 $PSItem(PowerShell V3.0에서 소개됨; 사용 현황 정보)의 별칭입니다.

자동 변수용 PowerShell(v6.0) 온라인 매뉴얼은 여기에 있습니다.

$_는 보통 블록 표현식 내에 있는 시스템에 의해 생성되는 변수이며 다음과 같은 파이프와 함께 사용되는 cmdlet에 의해 참조됩니다.Where-Object그리고.ForEach-Object.

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

스크립트 블록을 사용하여 값을 검증하는 커스텀파라미터 검증에서도 참조할 수 있습니다.이 경우,$_는 호출로부터 수신된 파라미터 값을 나타냅니다.

c#과 java에 가장 가까운 것은 lamda 표현입니다.powershell을 기본적으로 분석하면 스크립트 파일 a, 함수 및 cmdlet을 포함한 모든 것이 스크립트 블록입니다.자체 파라미터를 정의할 수 있지만 경우에 따라 처리/평가할 입력항목을 나타내는 파라미터가 시스템에 의해 작성될 수 있습니다.이러한 상황에서 자동 변수는$_.

$_는 이전 | (파이프)에서 전달된 각 오브젝트 또는 오브젝트에 대해 반복되는 변수입니다.

$_는 $PSItem으로, 기본적으로 다른 명령에서 파이프로 연결된 객체입니다.예를 들어 워크스테이션에서 Get-Volume을 실행하면 PSI tem 또는 객체의 행이 반환됩니다.

get-volume | select driveLetter,DriveType   

driveLetter DriveType
----------- ---------
      D      Fixed
             Fixed
      C      Fixed
      A      Removable

드라이브 문자 및 드라이브 유형은 속성입니다. 이제 출력을 $.(propertyName)로 파이핑할 때 이러한 항목 속성을 사용할 수 있습니다.(%는 Foreach-Object의 에일리어스이기도 합니다).예를 들어,

$vol = get-volume | select driveLetter,DriveType

$vol | Foreach-Object {
    if($_.DriveType -eq "Fixed") {
        "$($_.driveLetter) is $($_.driveType)"}
     else{
        "$($_.driveLetter) is $($_.driveType)"
     }
 }

Powershell 7에서 Terinary를 사용하면 Piped PSItem의 속성을 사용하여 로직을 단축할 수 있습니다.

언급URL : https://stackoverflow.com/questions/3494115/what-does-mean-in-powershell

반응형