about_Quoting_Rules

간단한 설명

PowerShell에서 작은따옴표와 큰따옴표를 사용하는 규칙을 설명합니다.

자세한 설명

따옴표는 리터럴 문자열을 지정하는 데 사용됩니다. 문자열을 작은따옴표() 또는 큰따옴표('")로 묶을 수 있습니다.

따옴표는 여기 문자열만드는 데도 사용됩니다. 여기 문자열은 따옴표가 문자 그대로 해석되는 작은따옴표 또는 큰따옴표 문자열입니다. 여기 문자열은 여러 줄에 걸쳐 있습니다. 여기 문자열의 모든 줄은 따옴표로 묶이지 않더라도 문자열로 해석됩니다.

원격 컴퓨터에 대한 명령에서 따옴표는 원격 컴퓨터에서 실행되는 명령의 일부를 정의합니다. 또한 원격 세션에서 따옴표는 명령의 변수가 로컬 컴퓨터 또는 원격 컴퓨터에서 먼저 해석되는지 여부를 결정합니다.

큰따옴표로 묶인 문자열

큰따옴표로 묶인 문자열은 확장 가능한 문자열입니다. 달러 기호($)가 앞에 오는 변수 이름은 문자열이 처리를 위해 명령에 전달되기 전에 변수의 값으로 바뀝니다.

예시:

$i = 5
"The value of $i is $i."

이 명령의 출력은 다음과 같습니다.

The value of 5 is 5.

또한 큰따옴표가 붙은 문자열에서 식이 계산되고 결과가 문자열에 삽입됩니다. 예시:

"The value of $(2+3) is 5."

이 명령의 출력은 다음과 같습니다.

The value of 5 is 5.

기본 변수 참조만 확장 가능한 문자열에 직접 포함할 수 있습니다. 배열 인덱싱 또는 멤버 액세스를 사용하는 변수 참조는 하위 식으로 묶어야 합니다. 예시:

"PS version: $($PSVersionTable.PSVersion)"
PS version: 7.2.0

변수 이름을 문자열의 후속 문자와 구분하려면 중괄호({})로 묶습니다. 변수 이름 뒤에 콜론(:)이 오는 경우에 특히 중요합니다. PowerShell은 범위 지정자와 범위 지정자 사이의 $: 모든 항목을 고려하므로 일반적으로 해석이 실패합니다. 예를 들어 "$HOME: where the heart is." 오류를 throw하지만 "${HOME}: where the heart is." 의도한 대로 작동합니다.

큰따옴표로 묶인 문자열에서 변수 값의 대체를 방지하려면 PowerShell 이스케이프 문자인 백틱 문자(`)를 사용합니다.

다음 예제에서 첫 번째 $i 변수 앞에 오는 백틱 문자는 PowerShell이 변수 이름을 해당 값으로 바꾸는 것을 방지합니다. 예시:

$i = 5
"The value of `$i is $i."

이 명령의 출력은 다음과 같습니다.

The value of $i is 5.

작은따옴표 붙은 문자열

작은따옴표로 묶인 문자열은 축자 문자열입니다. 문자열은 입력하는 것과 정확히 동일하게 명령에 전달됩니다. 대체는 수행되지 않습니다. 예시:

$i = 5
'The value of $i is $i.'

이 명령의 출력은 다음과 같습니다.

The value $i is $i.

마찬가지로 작은따옴표로 묶인 문자열의 식은 평가되지 않습니다. 문자열 리터럴로 해석됩니다. 예시:

'The value of $(2+3) is 5.'

이 명령의 출력은 다음과 같습니다.

The value of $(2+3) is 5.

문자열에 따옴표 문자 포함

큰따옴표를 문자열에 표시하려면 전체 문자열을 작은따옴표로 묶습니다. 예시:

'As they say, "live and learn."'

이 명령의 출력은 다음과 같습니다.

As they say, "live and learn."

작은따옴표로 묶은 문자열을 큰따옴표로 묶을 수도 있습니다. 예시:

"As they say, 'live and learn.'"

이 명령의 출력은 다음과 같습니다.

As they say, 'live and learn.'

또는 큰따옴표로 묶인 구의 따옴표를 두 배로 묶습니다. 예시:

"As they say, ""live and learn."""

이 명령의 출력은 다음과 같습니다.

As they say, "live and learn."

작은따옴표로 묶은 문자열에 작은따옴표를 포함하려면 두 번째 연속 작은따옴표를 사용합니다. 예시:

'don''t'

이 명령의 출력은 다음과 같습니다.

don't

PowerShell에서 큰따옴표를 문자 그대로 해석하도록 하려면 백틱 문자를 사용합니다. 이렇게 하면 PowerShell에서 따옴표를 문자열 구분 기호로 해석할 수 없습니다. 예시:

"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'

작은따옴표로 묶인 문자열의 내용은 문자 그대로 해석되므로 백틱 문자는 리터럴 문자로 처리되고 출력에 표시됩니다.

Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.

Here-strings

여기 문자열에 대한 따옴표 규칙은 약간 다릅니다.

여기 문자열은 기호(@)로 둘러싸인 작은따옴표 또는 큰따옴표로 묶인 문자열입니다. 여기 문자열 내의 따옴표는 문자 그대로 해석됩니다.

여기 문자열:

  • 여러 줄에 걸쳐 있습니다.
  • 는 여는 표시와 줄 바꿈으로 시작합니다.
  • 줄 바꿈과 닫는 표시로 끝납니다.
  • 에는 단일 문자열의 일부로 여는 표시와 닫는 표시 사이의 모든 줄이 포함됩니다.

일반 문자열과 마찬가지로 변수는 큰따옴표로 묶인 여기 문자열의 값으로 대체됩니다. 작은따옴표로 묶인 이 문자열에서는 변수가 해당 값으로 대체되지 않습니다.

모든 텍스트에 대해 여기 문자열을 사용할 수 있지만 다음 종류의 텍스트에 특히 유용합니다.

  • 리터럴 따옴표가 포함된 텍스트
  • HTML 또는 XML 블록의 텍스트와 같은 여러 줄의 텍스트
  • 스크립트 또는 함수 문서에 대한 도움말 텍스트

여기 문자열은 다음 형식 중 하나를 가질 수 있습니다. 여기서 <Enter> 는 Enter 키를 누를 때 추가되는 줄 바꿈 또는 줄 바꿈 숨겨진 문자를 나타냅니다.

큰따옴표:

@"<Enter>
<string> [string] ...<Enter>
"@

작은따옴표:

@'<Enter>
<string> [string] ...<Enter>
'@

참고 항목

마지막 줄 바꿈 문자는 닫는 표시의 일부입니다. 여기 문자열에 추가되지 않습니다.

여기 문자열은 여는 표시와 닫는 기호 사이의 모든 텍스트를 포함합니다. 여기 문자열에서 모든 따옴표는 문자 그대로 해석됩니다. 예시:

@"
For help, type "get-help"
"@

이 명령의 출력은 다음과 같습니다.

For help, type "get-help"

여기 문자열을 사용하면 명령에서 문자열 사용을 간소화할 수 있습니다. 예시:

@"
Use a quotation mark, like ' or ", to begin a string.
"@

이 명령의 출력은 다음과 같습니다.

Use a quotation mark, like ' or ", to begin a string.

여기에서 따옴표로 묶은 단일 문자열에서 변수는 문자 그대로 해석되고 정확하게 재현됩니다. 예시:

@'
The $profile variable contains the path
of your PowerShell profile.
'@

이 명령의 출력은 다음과 같습니다.

The $profile variable contains the path
of your PowerShell profile.

여기서 큰따옴표로 묶인 문자열에서 변수는 해당 값으로 바뀝니다. 예시:

@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@

이 명령의 출력은 다음과 같습니다.

Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.

여기서 문자열은 일반적으로 변수에 여러 줄을 할당하는 데 사용됩니다. 예를 들어 다음 여기 문자열은 XML 페이지를 $page 변수에 할당합니다.

$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
        <command:name>
               Format-Table
        </command:name>
        <maml:description>
            <maml:para>Formats the output as a table.</maml:para>
        </maml:description>
        <command:verb>format</command:verb>
        <command:noun>table</command:noun>
        <dev:version></dev:version>
</command:details>
...
</command:command>
"@

Here-strings는 cmdlet에 대한 입력 ConvertFrom-StringData 을 위한 편리한 형식이기도 합니다. 이 형식은 here-strings를 해시 테이블로 변환합니다. 자세한 내용은 ConvertFrom-StringData를 참조하세요.

참고 항목

PowerShell을 사용하면 here 문자열 구문을 사용하지 @ 않고도 큰따옴표 또는 작은따옴표로 묶인 문자열이 여러 줄에 걸쳐 있습니다. 그러나 전체 여기 문자열 구문은 기본 사용법입니다.

확장 가능한 문자열 해석

확장된 문자열이 콘솔에 표시되는 기본 출력과 반드시 같은 것은 아닙니다.

배열을 포함한 컬렉션은 요소의 문자열 표현 사이에 단일 공간을 배치하여 문자열로 변환됩니다. 기본 설정 변수 $OFS를 설정하여 다른 구분 기호를 지정할 수 있습니다. 자세한 내용은 기본 설정 변수를 $OFS 참조하세요.

다른 형식의 인스턴스는 의미 있는 표현을 제공하지 않을 수 있는 메서드를 ToString() 호출하여 문자열로 변환됩니다. 예시:

"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable

콘솔에서와 동일한 출력을 얻으려면 파이프하는 하위 식(subexpression)을 Out-String사용합니다. Trim() 선행 및 후행 빈 줄을 제거하려면 메서드를 적용합니다.

"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name                           Value
----                           -----
key                            value

문화권 설정은 문자열 해석에 영향을 미칩니다.

메서드는 ToString() 현재 구성된 문화권 설정을 사용하여 값을 문자열로 변환합니다. 예를 들어 다음 PowerShell 세션의 문화권은 .로 de-DE설정됩니다. 메서드는 ToString() 값을 $x 문자열로 변환할 때 소수 구분 기호에 쉼표(,)를 사용합니다. 또한 메서드는 ToString() 독일 로캘 설정에 적절한 형식을 사용하여 날짜를 문자열로 변환합니다.

PS> Get-Culture

LCID             Name             DisplayName
----             ----             -----------
1031             de-DE            German (Germany)

PS> $x = 1.2
PS> $x.ToString()
1,2

PS> (Get-Date 2024-03-19).ToString()
19.03.2024 00:00:00

그러나 PowerShell은 확장 가능한 문자열 식을 해석할 때 고정 문화권을 사용합니다.

PS? "$x"
1.2

PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00

따옴표 붙은 문자열을 외부 명령에 전달

일부 네이티브 명령에는 따옴표 문자가 포함된 인수가 사용됩니다. PowerShell은 따옴표 붙은 문자열을 외부 명령에 전달하기 전에 해석합니다. 이 해석은 외부 따옴표 문자를 제거합니다.

이 동작에 대한 자세한 내용은 about_Parsing 문서를 참조하세요.

참고 항목