2. 어휘 구조

편집 참고 사항

중요하다

Windows PowerShell 언어 사양 3.0 2012년 12월에 게시되었으며 Windows PowerShell 3.0을 기반으로 했습니다. 이 사양은 PowerShell의 현재 상태를 반영하지 않습니다. 현재 상태를 반영하도록 이 설명서를 업데이트할 계획은 없습니다. 이 설명서는 기록 참조를 위해 여기에 제공됩니다.

사양 문서는 Microsoft 다운로드 센터 Microsoft Word 문서로 사용할 수 있습니다. https://www.microsoft.com/download/details.aspx?id=36389 Word 문서가 Microsoft Learn에서 프레젠테이션용으로 변환되었습니다. 변환하는 동안 Docs 플랫폼의 서식을 수용하기 위해 일부 편집 변경이 이루어졌습니다. 일부 오타 및 사소한 오류가 수정되었습니다.

2.1 문법

이 사양은 두 문법을 사용하는 PowerShell 언어의 구문을 보여 줍니다. 어휘 문법(§B.1)은 유니코드 문자를 결합하여 선 종결자, 주석, 공백 및 토큰을 형성하는 방법을 보여 줍니다. 구문 문법(§B.2)은 어휘 문법에서 생성된 토큰을 결합하여 PowerShell 스크립트를 형성하는 방법을 보여 줍니다.

편의를 위해 이러한 문법의 조각은 이 사양 전체에서 적절한 위치에 복제됩니다.

문법에서 'a'에서 'z' 사이의 문자는 대소문자를 구분하지 않습니다. 즉, 변수, 별칭, 함수 이름, 키워드, 문장과 연산자에서 문자 대/소문자가 무시됩니다. 그러나 이 사양 전체에서 이러한 이름은 일부 자동 및 기본 설정 변수를 제외하고 소문자로 작성됩니다.

2.2 어휘 분석

2.2.1 스크립트

구문:

구문 정의의 ~opt~ 표기법은 어휘 엔터티가 구문에서 선택 사항임을 나타냅니다.

input:
    input-elements~opt~   signature-block~opt~

input-elements:
    input-element
    input-elements   input-element

input-element:
    whitespace
    comment
    token

signature-block:
    signature-begin   signature   signature-end

signature-begin:
    new-line-character   # SIG # Begin signature block   new-line-character

signature:
    base64 encoded signature blob in multiple single-line-comments

signature-end:
    new-line-character   # SIG # End signature block   new-line-character

묘사:

PowerShell 번역기에 대한 입력 소스 스트림은 스크립트의 입력으로, 유니코드 문자 시퀀스로 구성되어 있습니다. 이 스트림의 어휘 처리는 해당 문자를 토큰 시퀀스로 변환하여 구문 분석의 입력으로 사용되도록 합니다.

스크립트는 스크립트 파일저장된 PowerShell 명령 그룹입니다. 스크립트 자체에는 이름이 없으며 원본 파일에서 해당 이름을 가져옵니다. 해당 파일의 끝은 스크립트의 끝을 나타냅니다.

스크립트는 필요에 따라 디지털 서명을 포함할 수 있습니다. 호스트 환경은 서명 뒤에 있는 텍스트나 서명처럼 보이는 텍스트를 처리할 필요가 없습니다. 디지털 서명의 생성 및 사용은 이 사양에서 다루지 않습니다.

2.2.2 줄 종결자

구문:

new-line-character:
    Carriage return character (U+000D)
    Line feed character (U+000A)
    Carriage return character (U+000D) followed by line feed character (U+000A)

new-lines:
    new-line-character
    new-lines new-line-character

묘사:

입력 소스 스트림에 줄 바꿈 문자가있으면, 이는 오류 보고 및 한 줄 주석의 끝 감지와 같은 작업에 사용할 수 있는 줄로 스트림을 나눕니다.

줄 끝 문자는 공백(§2.2.4)으로 취급될 수 있습니다.

2.2.3 메모

구문:

comment:
    single-line-comment
    requires-comment
    delimited-comment

single-line-comment:
    # input-characters~opt~

input-characters:
    input-character
    input-characters input-character

input-character:
    Any Unicode character except a new-line-character

requires-comment:
    #Requires whitespace command-arguments

dash:
    - (U+002D)
    EnDash character (U+2013)
    EmDash character (U+2014)
    Horizontal bar character (U+2015)

dashdash:
    dash dash

delimited-comment:
    < # delimited-comment-text~opt~ hashes >

delimited-comment-text:
    delimited-comment-section
    delimited-comment-text delimited-comment-section

delimited-comment-section:
    >
    hashes~opt~  not-greater-than-or-hash

hashes:
    #
    hashes #

not-greater-than-or-hash:
    Any Unicode character except > or #

묘사:

소스 코드는 주석을 사용하여 설명을 추가할 수 있습니다.

A 한 줄 주석 는 문자 # 로 시작하고 줄 바꿈 문자로 끝난다.

으로 구분된 주석은 문자 쌍 <#으로 시작하고 문자 쌍 #>으로 끝납니다. 원본 줄의 일부로 전체 소스 줄로 발생하거나 여러 소스 줄에 걸쳐 발생할 수 있습니다.

주석은 공백으로 처리됩니다.

위의 프로덕션은 암시합니다.

  • 주석은 네스팅되지 않습니다.
  • 한 줄 주석에서 <# 및 #> 문자 시퀀스는 특별한 의미를 지니지 않습니다.
  • 문자 #은 구분된 주석에 특별한 의미가 없습니다.

어휘 문법은 주석이 토큰 내에서 발생할 수 없음을 의미합니다.

(스크립트 파일에서 설명서를 생성하는 데 사용되는 특수한 가치가 있는 주석이 포함된 스크립트 파일을 만드는 방법에 대한 자세한 내용은 §A를 참조하세요.)

주석 요구사항은 포함된 스크립트가 실행될 수 있도록 충족해야 하는 기준을 지정합니다. 기본 조건은 스크립트를 실행하는 데 사용되는 PowerShell 버전입니다. 최소 버전 요구 사항은 다음과 같이 지정됩니다.

#Requires -Version N[.n]

여기서 N (필수) 주 버전이고 n (선택 사항) 부 버전입니다.

requires-comment는 모든 스크립트 파일에 포함될 수 있지만, 함수나 cmdlet 내부에는 포함될 수 없습니다. 원본 줄의 첫 번째 항목이어야 합니다. 스크립트는 설명이 필요한 여러 을 포함할 수 있습니다.

문자 시퀀스는 해당 시퀀스가 # 또는 <#시작하는 경우에만 주석으로 인식됩니다. 예를 들어, "hello#there"는 하나의 토큰으로 간주되는 반면, "hello #there"는 한 줄 주석 뒤에 오는 hello 토큰으로 간주됩니다. 주석 시작 시퀀스는 공백을 따르는 것 외에도 식 종료 또는 문 종료 문자(예: ), }, ], ', "또는 ;)가 앞에 올 수 있습니다.

스냅인 내에 주석이 필요한 은 있을 수 없습니다.

requires-comment의 네 가지 다른 형식이 있습니다.

#Requires -Assembly AssemblyId
#Requires -Module ModuleName
#Requires -PSSnapin PSSnapin [ -Version *N* [.n] ]
#Requires -ShellId ShellId

2.2.4 공백

구문:

whitespace:
    Any character with Unicode class Zs, Zl, or Zp
    Horizontal tab character (U+0009)
    Vertical tab character (U+000B)
    Form feed character (U+000C)
    ` (The backtick character U+0060) followed by new-line-character

묘사:

공백 문자는 하나 이상의 띄어쓰기 문자들의 시퀀스로 구성됩니다.

공백이 토큰에 대한 구분 기호로 작동할 수 있다는 사실을 제외하고 무시됩니다.

일부 인기 언어와 달리 PowerShell은 줄 종결자 문자(§2.2.2)를 공백으로 간주하지 않습니다. 그러나 줄 끝 문자는 백틱 문자 `(U+0060)가 바로 앞에 올 경우 공백으로 처리할 수 있습니다. 줄의 내용이 구문적으로 완료되지만 다음 줄에는 이전 줄과 연결하려는 토큰이 포함되어 있는 경우에 필요합니다. 예를 들어

$number = 10 # assigns 10 to $number; nothing is written to the pipeline
+ 20 # writes 20 to the pipeline
- 50 # writes -50 to the pipeline
$number # writes $number's value, 10, to the pipeline

이 예제에서 백틱 기호는 소스 줄이 계속됨을 나타냅니다. 다음 식은 $number = 10 + 20 - 50와 동일합니다.

$number = 10 `
+ 20 `
- 50
$number # writes $number's value to the pipeline
-20

2.3 토큰

구문:

token:
    keyword
    variable
    command
    command-parameter
    command-argument-token
    integer-literal
    real-literal
    string-literal
    type-literal
    operator-or-punctuator

묘사:

토큰 PowerShell 언어 내에서 가장 작은 어휘 요소입니다.

토큰은 , 주석, 공백 또는 그 조합으로 구분할 수 있습니다.

2.3.1 키워드

구문:

keyword: one of
    begin          break          catch       class
    continue       data           define      do
    dynamicparam   else           elseif      end
    exit           filter         finally     for
    foreach        from           function    if
    in             inlinescript   parallel    param
    process        return         switch      throw
    trap           try            until       using
    var            while          workflow

묘사:

키워드 컨텍스트 종속 위치에서 사용할 때 특별한 의미가 있는 문자 시퀀스입니다. 대부분의 경우 이 토큰은 문의 첫 번째 토큰입니다. 그러나 문법으로 표시된 다른 위치가 있습니다. 키워드처럼 보이지만 실제로는 키워드 맥락에서 사용되지 않는 토큰은 명령 이름 또는 명령 인수입니다.

키워드 class, define, from, usingvar 나중에 사용할 수 있습니다.

메모

편집기 참고: classusing 키워드는 PowerShell 5.0에서 도입되었습니다. about_Classesabout_Using를 참조하세요.

2.3.2 변수

구문:

variable:
    $$
    $?
    $^
    $   variable-scope~opt~  variable-characters
    @   variable-scope~opt~  variable-characters
    braced-variable


braced-variable:
    ${   variable-scope~opt~   braced-variable-characters   }

variable-scope:
    Global:
    Local:
    Private:
    Script:
    Using:
    Workflow:
    variable-namespace

variable-namespace:
    variable-characters   :

variable-characters:
    variable-character
    variable-characters   variable-character

variable-character:
    A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
    _   (The underscore character U+005F)
    ?

braced-variable-characters:
    braced-variable-character
    braced-variable-characters   braced-variable-character

braced-variable-character:
    Any Unicode character except
        }   (The closing curly brace character U+007D)
        `   (The backtick character U+0060)
    escaped-character

escaped-character:
    `   (The backtick character U+0060) followed by any Unicode character

묘사:

변수는 (§5)에서 자세히 설명합니다. 변수 $? §2.3.2.2에 대해 논의됩니다. 범위는 §3.5설명합니다.

$$$^ 변수는 이 사양의 범위를 벗어난 대화형 환경에서 사용하도록 예약되어 있습니다.

변수 이름을 작성하는 방법에는 두 가지가 있습니다. 중괄호로 묶인 변수 이름$로 시작하여, 중괄호로 구분된 하나 이상의 거의 임의의 문자 집합으로 구성됩니다. 그리고 일반 변수 이름$로 시작하여, 중괄호로 묶인 변수 이름에서 허용하는 것보다 더 제한적인 집합에서 하나 이상의 문자 집합으로 구성됩니다. 모든 일반 변수 이름은 해당하는 중괄호로 묶인 변수 이름을 사용하여 표현할 수 있습니다.

$totalCost
$Maximum_Count_26

$végösszeg # Hungarian
$итог # Russian
$総計 # Japanese (Kanji)

${Maximum_Count_26}
${Name with`twhite space and `{punctuation`}}
${E:\\File.txt}

변수 이름의 길이에는 제한이 없으며 변수 이름의 모든 문자는 중요하며 문자 대/소문자는 고유하지 않습니다.

여러 종류의 변수가 있습니다. 사용자 정의(§2.3.2.1), 자동(§2.3.2.2), 기본 설정(§2.3.2.3). 모두 동일한 범위(§3.5)에 공존할 수 있습니다.

다음 함수 정의 및 호출을 고려합니다.

function Get-Power ([long]$Base, [int]$Exponent) { ... }

Get-Power 5 3 # $Base is 5, $Exponent is 3
Get-Power -Exponent 3 -Base 5 # " " "

각 인수는 하나씩 위치 또는 이름으로 전달됩니다. 그러나 인수 집합은 런타임 환경에서 처리되는 개별 인수로 확장된 그룹으로 전달될 수 있습니다. 이 자동 인수 확장은 스플래팅으로 알려져 있습니다. 예를 들어

$values = 5,3 # put arguments into an array
Get-Power @values

$hash = @{ Exponent = 3; Base = 5 } # put arguments into a Hashtable
Get-Power @hash

function Get-Power2 { Get-Power @args } # arguments are in an array

Get-Power2 -Exponent 3 -Base 5 # named arguments splatted named in
@args
Get-Power2 5 3 # position arguments splatted positionally in @args

이는 전달되는 변수의 첫 번째 문자로 @ 대신 $ 사용하여 수행됩니다. 이 표기법은 명령에 대한 인수에서만 사용할 수 있습니다.

이름은 각각 가상 드라이브(§3.1)에 저장되는 다양한 네임스페이스로 분할됩니다. 예를 들어 변수는 Variable:저장되고, 환경 변수는 Env:저장되고, 함수는 Function:저장되고, 별칭은 Alias:저장됩니다. 이러한 모든 이름은 변수 범위내에서 변수 네임스페이스 생성을 사용하여 변수로 액세스할 수 있습니다. 예를 들어

function F { "Hello from F" }
$Function:F # invokes function F

Set-Alias A F
$Alias:A # invokes function F via A

$Count = 10
$Variable:Count # accesses variable Count
$Env:PATH # accesses environment variable PATH

명시적 Variable: 네임스페이스와 함께 변수 이름을 사용하는 것은 해당 정규화 없이 동일한 변수 이름을 사용하는 것과 같습니다. 예를 들어 $v$Variable:v 서로 교환할 수 있습니다.

언어로 정의될 뿐만 아니라 New-Variablecmdlet을 사용하여 변수를 정의할 수도 있습니다.

2.3.2.1 사용자 정의 변수

문법에서 허용되지만 자동 또는 기본 설정 변수에서 사용되지 않는 변수 이름은 사용자 정의 변수에 사용할 수 있습니다.

사용자 정의 변수는 사용자 정의 스크립트를 통해 만들어지고 관리됩니다.

2.3.2.2 자동 변수

자동 변수는 PowerShell 환경에 대한 상태 정보를 저장합니다. 해당 값은 사용자가 작성한 스크립트에서 읽을 수 있지만 작성되지는 않습니다.

메모

이 문서에서 원래 찾은 테이블은 중복을 줄이기 위해 제거되었습니다. 자동 변수의 전체 목록은 about_Automatic_Variables참조하세요.

2.3.2.3 기본 설정 변수

기본 설정 변수는 세션에 대한 사용자 기본 설정을 저장합니다. PowerShell 런타임 환경에서 만들어지고 초기화됩니다. 해당 값은 사용자가 작성한 스크립트로 읽고 쓸 수 있습니다.

메모

이 문서에서 원래 찾은 테이블은 중복을 줄이기 위해 제거되었습니다. 기본 설정 변수의 전체 목록은 about_Preference_Variables참조하세요.

2.3.3 명령

구문:

generic-token:
    generic-token-parts

generic-token-parts:
    generic-token-part
    generic-token-parts generic-token-part

generic-token-part:
    expandable-string-literal
    verbatim-here-string-literal
    variable
    generic-token-char

generic-token-char:
    Any Unicode character except
        {   }   (   )   ;   ,   |   &   $
        ` (The backtick character U+0060)
        double-quote-character
        single-quote-character
        whitespace
        new-line-character
        escaped-character

generic-token-with-subexpr-start:
    generic-token-parts $(

2.3.4 매개 변수

구문:

command-parameter:
    dash first-parameter-char parameter-chars colon~opt~

first-parameter-char:
    A Unicode character of classes Lu, Ll, Lt, Lm, or Lo
    _ (The underscore character U+005F)
    ?

parameter-chars:
    parameter-char
    parameter-chars parameter-char

parameter-char:
    Any Unicode character except
        { } ( ) ; , \| & . [
        colon
        whitespace
        new-line-character

colon:
    : (The colon character U+003A)

verbatim-command-argument-chars:
    verbatim-command-argument-part
    verbatim-command-argument-chars verbatim-command-argument-part

verbatim-command-argument-part:
    verbatim-command-string
    & non-ampersand-character
    Any Unicode character except
        |
        new-line-character

non-ampersand-character:
    Any Unicode character except &

verbatim-command-string:
    double-quote-character non-double-quote-chars
    double-quote-character

non-double-quote-chars:
    non-double-quote-char
    non-double-quote-chars non-double-quote-char

non-double-quote-char:
    Any Unicode character except
        double-quote-character

묘사:

명령이 호출될 때, 하나 이상의 인수 를 통해 정보가 전달되며, 이 인수의 값은 해당 명령의 매개변수 집합을 통해 액세스할 수 있습니다. 매개변수를 인수와 매칭하는 과정을 매개변수 바인딩이라고 합니다.

다음과 같은 세 가지 종류의 인수가 있습니다.

  • [switch]매개 변수(§8.10.5) -- 첫 번째 매개 변수-char와 parameter-chars가 함께 호출되는 명령 의 매개 변수 이름(선행-이 없는)의 이름에 해당하는 스위치 이름을 구성하는 양식 명령 매개 변수가 있습니다. 후행 콜론을 생략하면 이 인수의 존재는 해당 매개 변수가 $true설정됨을 나타냅니다. 후행 콜론이 있는 경우 바로 다음 인수는 bool 형식의 값을 지정해야 하며 해당 매개 변수는 해당 값으로 설정됩니다. 예를 들어 다음 호출은 동일합니다.

    Set-MyProcess -Strict
    Set-MyProcess -Strict: $true
    
  • 인수가 있는 매개 변수(§8.10.2) -- 이에는 first-parameter-charparameter-chars가 함께 매개 변수 이름을 구성하는 명령 매개 변수 형식이 있으며, 이는 호출되는 명령의 매개 변수 이름(선행 -없이)에 해당합니다. 후행 콜론이 없어야 합니다. 바로 다음 인수는 연결된 값을 지정합니다. 예를 들어, 명령 Get-Power에 매개변수 $Base$Exponent가 주어진 경우, 다음 호출은 동일합니다.

    Get-Power -Base 5 -Exponent 3
    Get-Power -Exponent 3 -Base 5
    
  • 위치 인수(§8.10.2) - 명령 내 인수와 그에 해당하는 매개 변수는 각기 순서가 지정되며, 첫 번째의 위치는 0입니다. 위치 0의 인수는 위치 0의 매개 변수에 바인딩됩니다. 위치 1의 인수는 위치 1의 매개 변수에 바인딩됩니다. 등등. 예를 들어, 명령 Get-Power가 각각 위치 0과 1에 매개변수 $Base$Exponent를 가지고 있는 경우, 다음 명령을 사용하여 호출할 수 있습니다.

    Get-Power 5 3
    

특수 매개 변수 --대한 자세한 내용은 --% 참조하세요.

명령이 호출되면 매개 변수 이름을 축약할 수 있습니다. 동일한 명령에서 허용하는 다른 매개 변수의 이름과 관련하여 명확하지 않은 경우 전체 이름의 모든 고유 선행 부분을 사용할 수 있습니다.

매개 변수 바인딩에 대한 자세한 내용은 §8.14참조하세요.

2.3.5 리터럴

구문:

literal:
    integer-literal
    real-literal
    string-literal

2.3.5.1 숫자 리터럴

숫자 리터럴에는 정수(§2.3.5.1.1) 및 real(§2.3.5.1.2)의 두 종류가 있습니다. 둘 다 승수 접미사를 가질 수 있습니다 (§2.3.5.1.3).

2.3.5.1.1 정수 리터럴

구문:

integer-literal:
    decimal-integer-literal
    hexadecimal-integer-literal

decimal-integer-literal:
    decimal-digits numeric-type-suffix~opt~ numeric-multiplier~opt~

decimal-digits:
    decimal-digit
    decimal-digit decimal-digits

decimal-digit: one of
    0  1  2  3  4  5  6  7  8  9

numeric-type-suffix:
    long-type-suffix
    decimal-type-suffix

hexadecimal-integer-literal:
    0x hexadecimal-digits long-type-suffix~opt~
    numeric-multiplier~opt~

hexadecimal-digits:
    hexadecimal-digit
    hexadecimal-digit hexadecimal-digits

hexadecimal-digit: one of
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

long-type-suffix:
    l

numeric-multiplier: one of
    kb mb gb tb pb

묘사:

정수 리터럴의 형식은 값, long-type 접미사존재 여부 및 숫자 승수(§2.3.5.1.3)의 존재 여부에 따라 결정됩니다.

long-type 접미사가 없는 정수 리터럴의 경우

  • 해당 값을 int 형식(§4.2.3)으로 나타낼 수 있는 경우 해당 형식입니다.
  • 그렇지 않으면 값이 long 형식(§4.2.3)으로 표시될 수 있는 경우 해당 형식입니다.
  • 그렇지 않으면 해당 값이 10진수 형식(§2.3.5.1.2)으로 표현될 수 있는 경우 해당 형식입니다.
  • 그렇지 않으면 double 형식(§2.3.5.1.2)으로 표시됩니다.

long 유형 접미사가 붙은 정수 리터럴의 경우

  • 값이 long 형식(§4.2.3)으로 표시될 수 있는 경우 해당 형식입니다.
  • 그렇지 않으면 해당 리터럴의 형식이 잘못되어 있습니다.

정수 값의 2개 보수 표현에는 양수보다 음수 값이 하나 더 있습니다. int 형식의 경우 해당 추가 값은 -2147483648. 긴 형식의 경우 해당 추가 값은 -9223372036854775808. 해당 토큰 2147483648은 일반적으로 long 형식의 리터럴로 처리되지만, 단항 연산자 -가 바로 앞에 올 때, 해당 연산자와 리터럴은 가장 작은 값을 갖는 int 형식의 리터럴로 처리됩니다. 마찬가지로 토큰 9223372036854775808 일반적으로 10진수 형식의 실제 리터럴로 처리되더라도 단항 연산자 바로 앞에 오는 경우 해당 연산자와 리터럴은 가장 작은 값을 갖는 긴 형식의 리터럴로 처리됩니다.

정수 리터럴의 몇 가지 예는 123(int), 123L(long) 및 200000000000(long)입니다.

바이트 형식의 정수 리터럴과 같은 것은 없습니다.

2.3.5.1.2 실제 리터럴

구문:

real-literal:
    decimal-digits . decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
    . decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
    decimal-digits exponent-part decimal-type-suffix~opt~ numeric-multiplier~opt~

exponent-part:
    e sign~opt~  decimal-digits

sign: one of
    +
    dash

decimal-type-suffix:
    d
    l

numeric-multiplier: one of
    kb mb gb tb pb

dash:
    - (U+002D)
    EnDash character (U+2013)
    EmDash character (U+2014)
    Horizontal bar character (U+2015)

묘사:

실제 리터럴은 숫자 승수(§2.3.5.1.3)을 포함할 수 있습니다.

두 가지 종류의 실제 리터럴이 있습니다. 이중소수점. 이는 10진수 형식의 접미사의 부재 또는 존재로 각각 표시됩니다. (float real 리터럴이라는 것은 없습니다.)

double real 리터럴은 double 형(§4.2.4.1)에 속합니다. 10진수 실제 리터럴에는 10진수 형식(§4.2.4.2)이 있습니다. 소수 실제 리터럴의 분수 부분에 있는 후행 0은 중요합니다.

이중 실수 리터럴에서 지수 부분소수 자릿수가 지원되는 최소값보다 작으면, 해당 이중 실수 리터럴의 값은 0입니다. 10진수 실제 리터럴의 지수 부분10진수 값이 지원되는 최소값보다 작으면 해당 리터럴의 형식이 잘못되었습니다. 더블 또는 10진수 실수 리터럴의 지수 부분10진수 자릿수가 지원되는 최대값보다 크면, 해당 리터럴의 형식이 잘못되었습니다.

이중 실제 리터럴의 몇 가지 예는 1., 1.23, .45e35, 32.e+12 및 123.456E-231입니다.

10진수 실제 리터럴의 몇 가지 예는 1d(배율 0), 1.20d(배율 2), 1.23450e1d(즉, 크기가 4인 12.3450), 1.2345e3d(즉, 크기가 1인 1234.5), 1.2345e-1d(즉, 0.12345, 배율 5), 1.2345e-3d(즉, 0.0012345, 7).

메모

이중 실수 리터럴에는 소수 또는 지수 부분이 필요하지 않으므로, (123).M에서 그룹화 괄호는 값이 123인 정수 객체에 대해 속성 또는 메서드 M을 선택하도록 필요합니다. 이러한 괄호가 없다면 실제 리터럴은 잘못된 형식이 될 것입니다.

메모

PowerShell은 무한대 및 NaN에 대한 리터럴을 제공하지 않지만 float 및 double 형식의 정적 읽기 전용 속성 PositiveInfinity, NegativeInfinity 및 NaN(§4.2.4.1)에서 이중 실제 리터럴과 유사한 값을 가져올 수 있습니다.

문법은 이중 실제 리터럴로 시작하는 항목이 l 또는 L 형식 접미사를 가질 수 있도록 허용합니다. 이러한 토큰은 실제로 값이 long 형식으로 표현되는 정수 리터럴입니다.

메모

이 기능은 이전 버전의 PowerShell과의 호환성을 위해 유지되었습니다. 그러나 프로그래머는 리터럴의 실제 값을 쉽게 가릴 수 있으므로 이 형식의 정수 리터럴을 사용하지 않는 것이 좋습니다. 예를 들어 1.2L의 값은 1이고, 1.2345e1L의 값은 12이고, 1.2345e-5L의 값은 0이며, 그 중 어느 것도 즉시 명확하지 않습니다.

2.3.5.1.3 승수 접미사

구문:

numeric-multiplier: *one of*
    kb mb gb tb pb

묘사:

편의를 위해 정수 및 실수 리터럴은 일반적으로 사용되는 10의 거듭제곱 중 하나를 나타내는 숫자 승수를 포함할 수 있습니다. 숫자 계수는 대문자 또는 소문자의 조합으로 작성할 수 있습니다.

승수 의미 예제
킬로바이트 킬로바이트(1024) 1kb ≡ 1024
메가바이트 메가바이트(1024 x 1024) 1.30Dmb ≡ 1363148.80
기가바이트 기가바이트(1024 x 1024 x 1024) 0x10Gb ≡ 17179869184
결핵 테라바이트(1024 x 1024 x 1024 x 1024) 1.4e23tb ≡ 1.5393162788864E+35
pb 페타바이트(1024 x 1024 x 1024 x 1024 x 1024) 0x12Lpb ≡ 20266198323167232

2.3.5.2 문자열 리터럴

구문:

string-literal:
    expandable-string-literal
    expandable-here-string-literal
    verbatim-string-literal
    verbatim-here-string-literal

expandable-string-literal:
    double-quote-character expandable-string-characters~opt~  dollars~opt~ double-quote-character

double-quote-character:
    " (U+0022)
    Left double quotation mark (U+201C)
    Right double quotation mark (U+201D)
    Double low-9 quotation mark (U+201E)

expandable-string-characters:
      expandable-string-part
      expandable-string-characters
      expandable-string-part

expandable-string-part:
    Any Unicode character except
        $
        double-quote-character
        ` (The backtick character U+0060)
    braced-variable
    $ Any Unicode character except
        (
        {
        double-quote-character
        ` (The backtick character U+0060)*
    $ escaped-character
    escaped-character
    double-quote-character double-quote-character

dollars:
    $
    dollars $

expandable-here-string-literal:
    @  double-quote-character  whitespace~opt~  new-line-character
        expandable-here-string-characters~opt~  new-line-character  double-quote-character  @

expandable-here-string-characters:
    expandable-here-string-part
    expandable-here-string-characters  expandable-here-string-part

expandable-here-string-part:
    Any Unicode character except
        $
        new-line-character
    braced-variable
    $ Any Unicode character except
        (
        new-line-character
    $ new-line-character  Any Unicode character except double-quote-char
    $ new-line-character double-quote-char  Any Unicode character except @
    new-line-character  Any Unicode character except double-quote-char
    new-line-character double-quote-char  Any Unicode character except @

expandable-string-with-subexpr-start:
    double-quote-character  expandable-string-chars~opt~  $(

expandable-string-with-subexpr-end:
    double-quote-char

expandable-here-string-with-subexpr-start:
    @  double-quote-character  whitespace~opt~  new-line-character  expandable-here-string-chars~opt~  $(

expandable-here-string-with-subexpr-end:
    new-line-character  double-quote-character  @

verbatim-string-literal:
    single-quote-character verbatim-string-characters~opt~ single-quote-char

single-quote-character:
    ' (U+0027)
    Left single quotation mark (U+2018)
    Right single quotation mark (U+2019)
    Single low-9 quotation mark (U+201A)
    Single high-reversed-9 quotation mark (U+201B)

verbatim-string-characters:
    verbatim-string-part
    verbatim-string-characters verbatim-string-part

verbatim-string-part:
    *Any Unicode character except* single-quote-character
    single-quote-character  single-quote-character

verbatim-here-string-literal:
    @ single-quote-character whitespace~opt~  new-line-character
        verbatim-here-string-characters~opt~  new-line-character
            single-quote-character *@*

verbatim-*here-string-characters:
    verbatim-here-string-part
    verbatim-here-string-characters  verbatim-here-string-part

verbatim-here-string-part:
    Any Unicode character except* new-line-character
    new-line-character  Any Unicode character except single-quote-character
    new-line-character  single-quote-character  Any Unicode character except @

묘사:

문자열 리터럴에는 다음과 같은 네 가지 종류가 있습니다.

  • 축자 문자열 리터럴(한 줄 작은따옴표)는 작은따옴표 문자쌍으로 구분된 0개 이상의 문자 시퀀스입니다. 예는 '' 및 '빨간색'입니다.

  • 확장 가능한 문자열 리터럴(한 줄 두 번 따옴표로 묶음)이며, 이는 큰따옴표 문자쌍으로 구분된 0개 이상의 문자 시퀀스입니다. 예를 들어 ""와 "빨간색"이 있습니다.

  • @작은따옴표 문자작은따옴표 문자@으로 구분된 문자 쌍으로 구분된 0개 이상의 문자 시퀀스인(다중 줄 단일 따옴표)각각 둘 이상의 소스 줄에 포함됩니다. 예제는 다음과 같습니다.

    @'
    '@
    
    @'
    line 1
    '@
    
    @'
    line 1
    line 2
    '@
    
  • 확장 가능한 여기-문자열 리터럴(다중 줄 큰따옴표)은, 각각 @큰따옴표 문자큰따옴표 문자@로 구분되는 문자 0개 이상의 시퀀스로, 두 개 이상의 소스 줄에 포함됩니다. 예제는 다음과 같습니다.

    @"
    "@
    
    @"
    line 1
    "@
    
    @"
    line 1
    line 2
    "@
    

verbatim-here-string-literalexpandable-here-string-literal의 경우, 여는 구분 기호 문자 쌍과 동일한 소스 줄에서는 공백(무시됨)을 제외하고 다른 문자가 올 수 없으며, 닫는 구분 기호 문자 쌍과 동일한 소스 줄의 앞에는 다른 문자가 올 수 없습니다.

축자형 here-string 리터럴 또는 확장 가능한 here-string 리터럴의 본문은 시작 구분 기호 다음의 첫 번째 소스 줄 시작 지점에서 시작하여, 끝 구분 기호 앞의 마지막 소스 줄 끝에서 끝납니다. 본문이 비어 있을 수 있습니다. 닫는 구분 기호 앞의 마지막 소스 줄에 있는 줄 종결자는 그 리터럴의 본문에 포함되지 않습니다.

이러한 종류의 리터럴에는 형식 문자열(§4.3.1)이 있습니다.

축자 문자열 리터럴 또는 확장 가능한 문자열 리터럴를 구분하는 데 사용되는 문자는, 해당 문자열 리터럴에 포함하려면 그 문자를 연속해서 두 번 작성할 수 있습니다. 예를 들어 'What''s the time?'"I said, ""Hello"".". 그러나 작은따옴표확장 문자열 리터럴내에서 특별한 의미가 없고, 큰따옴표직접 문자열 리터럴내에서 특별한 의미가 없습니다.

확장 가능한 문자열 리터럴 및 확장 가능한 여기 문자열 리터럴은 이스케이프된 문자(§2.3.7)를 포함할 수 있습니다. 예를 들어 다음 문자열 리터럴이 파이프라인에 기록되면 결과는 아래와 같습니다.

"column1`tcolumn2`nsecond line, `"Hello`", ```Q`5`!"
column1<horizontal-tab>column2<new-line>
second line, "Hello", `Q5!

expandable-string-literal 또는 expandable-here-string-literal에 변수가 포함된 경우, 그 이름이 이스케이프 문자로 바로 앞서지 않는 한 변수 값의 문자열 표현(§6.7)으로 바뀝니다. 이것은 변수 대체이라고 한다.

메모

변수 이름이 일부 더 큰 식의 일부인 경우 변수 이름만 대체됩니다. 예를 들어, $a이(가) 100 및 200을 포함하는 배열이라면, ">$a.Length<">100 200.Length<가 되고, ">$($a.Length)<">2<가 됩니다. 아래 부분 표현식 확장을 참조하세요.

예를 들어 소스 코드

$count = 10
"The value of `$count is $count"

결과는 expandable-string-literal

The value of $count is 10.

다음을 고려합니다.

$a = "red","blue"
"`$a[0] is $a[0], `$a[0] is $($a[0])" # second [0] is taken literally

결과는 다음과 입니다.

$a[0] is red blue[0], $a[0] is red

expandable-string-literalexpandable-here-string-literal또한 양식 텍스트를 $( ... )(§7.1.6)로 처리하여 하위 식 확장이라는 대체를 지원합니다. 이러한 텍스트는 해당 식 값(§6.8)의 문자열 표현으로 바뀝니다. 하위 식명령문 목록에서 토큰을 구분하기 위해 사용된 공백은 결과 문자열을 구성할 때는 무시됩니다.

예제는 다음과 같습니다.

$count = 10
"$count + 5 is $($count + 5)"
"$count + 5 is `$($count + 5)"
"$count + 5 is `$(`$count + 5)"

다음과 같은 expandable-string-literal이(가) 생성됩니다.

10 + 5 is 15
10 + 5 is $(10 + 5)
10 + 5 is $($count + 5)

다음 소스는

$i = 5; $j = 10; $k = 15
"`$i, `$j, and `$k have the values $( $i; $j; $k )"

결과는 다음 expandable-string-literal과 같이 나옵니다.

$i, $j, and $k have the values 5 10 15

이 네 줄은 다음과 같이 더 간결하게 작성되었을 수 있습니다.

"`$i, `$j, and `$k have the values $(($i = 5); ($j = 10); ($k = 15))"

다음 예제에서는

"First 10 squares: $(for ($i = 1; $i -le 10; ++$i) { "$i $($i*$i) " })"

결과 expandable-string-literal 다음과 같습니다.

First 10 squares: 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100

보시다시피, 하위 식은 변수 대체 및 하위 식 확장이 모두 포함된 문자열 리터럴을 포함할 수 있습니다. 추가적으로, 내부 expandable-string-literal의 구분 기호는 이스케이프할 필요가 없습니다. 이는 그 구분 기호들이 하위 식 안에 존재하므로 외부 expandable-string-literal의 종결자가 될 수 없음을 의미합니다.

expandable-string-literal 또는 expandable-here-string-literal 는 변수 대체 또는 하위 표현식 확장을 포함하며, 해당 리터럴이 사용될 때마다 평가됩니다. 예를 들어

$a = 10
$s1 = "`$a = $($a; ++$a)"
"`$s1 = >$s1<"
$s2 = "`$a = $($a; ++$a)"
"`$s2 = >$s2<"
$s2 = $s1
"`$s2 = >$s2<"

그 결과, 다음 expandable-string-literal이 나타납니다:

$s1 = >$a = 10<
$s2 = >$a = 11<
$s2 = >$a = 10<

축자-여기-문자열 리터럴의 내용은 본문 내의 앞뒤 공백을 포함해 그대로 사용됩니다. 따라서 포함된 작은따옴표 문자두 배로 늘릴 필요가 없으며 대체 또는 확장이 없습니다. 예를 들어

$lit = @'
That's it!
2 * 3 = $(2*3)
'@

그 결과 리터럴 값이 생성됩니다.

That's it!
2 * 3 = $(2*3)

expandable-here-string-literal의 내용은 대체 및 확장의 대상이 되지만, 본문 내에서 하위 식바깥쪽에 있는 선행 또는 후행 공백은 그대로 사용되며, 포함된 큰따옴표 문자를 두 배로 늘릴 필요가 없습니다. 예를 들어

$lit = @"
That's it!
2 * 3 = $(2*3)
"@

확장될 때 생성되는 문자열 리터럴은 다음과 같습니다.

That's it!
2 * 3 = 6

직접 문자열 리터럴확장 가능한 문자열 리터럴모두 본문 내의 각 줄 종결자는 구현 정의 방식으로 결과 리터럴에 나타납니다. 예를 들어,

$lit = @"
abc
xyz
"@

본문의 두 번째 줄에는 두 개의 선행 공백이 있고 본문의 첫 번째 및 두 번째 줄에는 선 종결자가 있습니다. 그러나 본문의 두 번째 줄에 대한 종결자는 해당 본문의 부분이 아닙니다. 결과 리터럴은 다음과 같습니다. "abc<implementation-defined character sequence>xyz".

메모

소스의 가독성을 높이기 위해 긴 문자열 리터럴을 줄 종결자를 삽입하지 않고 여러 소스 줄로 나눌 수 있습니다. 이 작업은 각 파트를 별도의 리터럴로 작성하고 + 연산자(§7.7.2)와 파트를 연결하여 수행됩니다. 이 연산자를 사용하면 피연산자가 네 종류의 문자열 리터럴을 지정할 수 있습니다.

메모

문자 리터럴 자체는 존재하지 않지만, [char]"A" 또는 "A"[0]과 같은 1자 문자열의 첫 문자를 통해 같은 효과를 달성할 수 있습니다.

축자 여기 문자열 리터럴확장형 여기 문자열 리터럴모두 본문 내의 각 줄 종결자가 제공된 대로 정확하게 나타납니다.

2.3.5.3 널 리터럴

자동 변수 $null(§2.3.2.2)를 참조하세요.

2.3.5.4 부울 리터럴

자동 변수 $false$true(§2.3.2.2)를 참조하세요.

2.3.5.5 배열 리터럴

PowerShell을 사용하면 단항 쉼표 연산자(§7.2.1), 배열 식 (§7.1.7), 이진 쉼표 연산자(§7.3), 및 범위 연산자(§7.4)를 사용하여 배열 형식(§9)의 식을 작성할 수 있습니다.

2.3.5.6 해시 리터럴

PowerShell을 사용하면 해시 리터럴 식 사용하여 Hashtable(§10) 형식의 식을 작성할 수 있습니다(§7.1.9).

2.3.5.7 형식 이름

구문:

type-name:
    type-identifier
    type-name . type-identifier

type-identifier:
    type-characters

type-characters:
    type-character
    type-characters type-character

type-character:
    A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
    _ (The underscore character U+005F)

array-type-name:
    type-name [

generic-type-name:
    type-name [

2.3.6 연산자 및 문장 부호

구문:

operator-or-punctuator: one of
    {   }   [   ]   (   )   @(   @{   $(   ;
    &&  ||  &   |   ,   ++  ..   ::   .
    !   *   /   %   +   -   --
    -and   -band   -bnot   -bor
    -bxor   -not   -or     -xor
    assignment-operator
    merging-redirection-operator
    file-redirection-operator
    comparison-operator
    format-operator

assignment-operator: one of
    =  -=  +=  *=  /=  %=

file-redirection-operator: one of
    >  >>  2>  2>>  3>  3>>  4>  4>>
    5>  5>>  6>  6>>  *>  *>>  <

merging-redirection-operator: one of
    *>&1  2>&1  3>&1  4>&1  5>&1  6>&1
    *>&2  1>&2  3>&2  4>&2  5>&2  6>&2

comparison-operator: *one of
    -as           -ccontains      -ceq
    -cge          -cgt            -cle
    -clike        -clt            -cmatch
    -cne          -cnotcontains   -cnotlike
    -cnotmatch    -contains       -creplace
    -csplit       -eq             -ge
    -gt           -icontains      -ieq
    -ige          -igt            -ile
    -ilike        -ilt            -imatch
    -in           -ine            -inotcontains
    -inotlike     -inotmatch      -ireplace
    -is           -isnot          -isplit
    -join         -le             -like
    -lt           -match          -ne
    -notcontains  -notin         -notlike
    -notmatch     -replace       -shl*
    -shr          -split

format-operator:
    -f

묘사:

&&|| 나중에 사용하도록 예약되어 있습니다.

메모

편집기 참고: 파이프라인 체인 연산자 &&|| PowerShell 7에 도입되었습니다. about_Pipeline_Chain_Operators을 참조하세요.

연산자의 하이픈 다음에 오는 이름은 연산자 문맥에서만 해당 용도로 예약됩니다.

대시로 시작하는 연산자는 그 대시와 그 뒤에 오는 토큰 사이에 공백이 없어야 합니다.

2.3.7 이스케이프된 문자

구문:

escaped-character:
    ` (The backtick character U+0060) followed by any Unicode character

묘사:

이스케이프된 문자은 백틱 문자(U+0060)를 접두사로 제공하여 문자에 특별한 해석을 부여하는 방법입니다. 다음 표에서는 각 이스케이프 문자의미를 보여줍니다.

이스케이프된 문자 의미
`a 경고(U+0007)
`b 백스페이스(U+0008)
`f 폼 피드(U+000C)
`n 줄 바꿈(U+000A)
`r 캐리지 리턴(U+000D)
`t 가로 탭(U+0009)
`v 세로 탭(U+0009)
`' 작은따옴표(U+0027)
`" 큰따옴표(U+0022)
`` 백틱(U+0060)
`0 NUL(U+0000)
`x x이 위에 나열된 문자에 해당하지 않는 경우, 백틱 문자는 무시되고 x은 문자 그대로 사용됩니다.

위의 표에 있는 최종 항목의 의미는 토큰을 분리하는 공백을 대신 토큰의 일부로 만들 수 있다는 것입니다. 예를 들어 공백을 포함하는 파일 이름은 Test` Data.txt('Test Data.txt' 또는 "Test Data.txt")로 작성할 수 있습니다.