Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Windows의 새로운 쉘인 PowerShell은 사용자가 입력한 명령어에 대해서 파싱(Parsing) 처리를 하고 실제 실행을 하게 됩니다. 파싱에 대한 정확한 이해를 해야 정확한 명령어를 내릴 수 있습니다.
PowerShell은 예제서 입력한 Get-Process IEX*라는 Cmdlet 구문에 대해서 연속된 토큰의 형태로 세그먼팅(Segmenting)하게 됩니다. 첫번째 토큰에 "Get-Process", 두번째 토큰에 "IEX*"가 들어가게 됩니다. 당연히 명령어는 하나로 처리되게 됩니다.
명령어를 처리할 때, PowerShell의 파서는 아래의 두가지 모드중 하나로 처리하게 됩니다.
Expression Mode - 캐릭터 String 변수는 반드시 쌍따옴표(")안에 포함되어야 합니다. 만약 숫자가 쌍따옴표(")로 묶여있지 않을 경우엔 숫자 값으로 처리합니다.
Argument Mode - 아래의 문자로 시작하지 않는 각각의 값은 확장가능한 String으로 처리합니다.
달러($) - 변수 선언시 사용됩니다.
심볼(@) - 배열 선언시 사용됩니다.
쌍따옴표("), 따옴표(') - String 값을 묶을 때 사용합니다.
괄호 - Method 사용시 변수 입력 또는 Cmdlet을 묶을 때 사용합니다.
예제1 - 3+3 : Expression 모드 - 결과 숫자 4
예제2 - Write-Output 3+3 : Argument 모드 - 결과 String 6
예제3 - Write-Output (3+3) : Expression 모드 - 결과 숫자 6
예제4 - $b = 3+3 : Experssion 모드 - 결과 변수 b에 숫자 6을 할당
예제5 - Write-Output $b : Expression 모드 - 결과 숫자 6
예제6 - Write-Output $b+3 : Argument 모드 - 결과 String "6+3"
위의 두개의 예제의 차이가 느껴지시나요?
앞선 예제의 경우엔 Argument 모드로 처리된 것입니다. $a가 String으로 선언이 되었으므로, + 2를 Argument 모드로 처리하는 것입니다.(문자로 처리해야 하므로)
뒷 예제의 경우에는 Expression 모드로 처리된 것이죠.. $a가 String입니다. 그렇지만 $b가 Integer 2 값 뒤에 String이 나왔으므로, $a가 String에서 Integer로 컨버팅된 것입니다. 그러므로 Expression 모드로 처리한 것이죠. 이해가 되시나요?
자 그럼 위에 그림이 이해가 되실겁니다. 이해가 안되시는 분들은 위에 내용을 잘 읽어보시기 바랍니다. 다소 어렵게 느껴지지만 본인만의 이해론을 정리하시면 쉽게 느끼실 수 있습니다.