PowerShell 대 유닉스 쉘


14

PowerShell의 기능에 대해 몇 가지 이야기를 들었습니다. 그 중 일부는 유닉스 쉘의 일반적인 기능처럼 보입니다.

따라서 Powershell에는 셸 스크립트와 유사한 파이핑 및 커맨드 렛이 포함되어 있습니다. 그러나 아직 시도하지 않았으므로 (Windows 없음) 잘못되었을 수 있습니다.

그래서 내 질문은 : Powershell이 ​​Unix 쉘과 비슷합니까? 아니면 개념이 다른가요?
후자의 경우 : 어떤 점에서 개념이 다른가?


2
이 질문은 이미 StackOverflow에서 질문되었습니다 : stackoverflow.com/questions/573623/powershell-vs-unix-shells
Richard

답변:


20

PowerShell은 표면적으로 Unix 쉘과 유사합니다. PowerShell에는 ls, rm, cp, mv 등과 같이 Unix에서 사용되는 많은 명령에 대한 별칭이 있습니다. 그러나 별칭 뒤에있는 cmdlet의 작동 방식은 상당히 다릅니다.

* nix 셸에서 모든 것은 텍스트 기반이므로 한 명령의 출력을 다른 명령으로 파이프 할 수 있지만 수신 프로그램은 파이프 라인에서 텍스트를 구문 분석 / 해석하는 방법을 알아야합니다. 이것은 PowerShell과 * nix 셸의 주요 차이점입니다 ... PowerShell에서 전달되는 모든 것은 객체입니다.

그 결과 한 명령에서 다른 명령으로의 배관은 stdout을 stdin으로 배관하는 것이 아닙니다. 본격적인 .net 객체를 수신기로 파이핑합니다. 따라서 수신자는 해당 유형의 오브젝트를 처리하는 방법을 알아야합니다. 텍스트 파싱을 구현할 필요는 없지만 입력 객체의 메서드 및 속성 (멤버)을 호출하는 방법을 이해해야합니다.

* nix 명령 행 프로그램에서는 stdin에서 읽고 다른 프로그램이 생성 한 텍스트에서 정보를 구문 분석하는 코드를 작성합니다. PowerShell에서는 다음과 같은 작업을 수행합니다.

function changeName($myObject)
{
    if ($myObject.GetType() -eq [MyType])
    {
        #print the current name to screen
        $myObject.Name
        #change string in the 'name' property
        $myObject.Name = "NewName"
    }
    return $myObject
}

명령 행에서이 코드를 호출하면 다음과 같습니다.

PS> $myObject = New-Object MyType -arg "OriginalName"
PS> $myObject = changeName $myNewObject
OriginalName
PS> $myObject.Name
NewName

배관 메커니즘을 사용하여 위와 동일한 작업을 수행 할 수도 있지만 텍스트가 아닌 객체를 전달한다는 점에서 주요 차이점을 확인할 수 있습니다.

PS> $myObject = New-Object MyType -arg "OriginalName" | changeName
OriginalName
PS> $myObject.Name
NewName

이 주요한 차이점을 잊어 버린 나는 다른 피상적 인 유사성이 있지만 대부분 문법적으로 비슷하다고 말합니다. PowerShell 구문은 * nix 셸 사용자를 염두에두고 설계된 것으로 보이므로 많은 언어 스타일이 비슷합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.