주석_에_대한
간단한 설명
PowerShell 주석을 사용하는 방법을 설명하고 특수 사용 사례를 나열합니다.
긴 설명
주석을 작성하여 PowerShell 코드에 주석을 달거나 구조화하여 가독성을 높일 수 있습니다. 코드를 실행하면 PowerShell에서 주석 텍스트가 무시됩니다.
주석은 코드 판독기에게 중요한 컨텍스트를 제공합니다. 다음 용도로 주석을 사용해야 합니다.
- 더 간단한 용어로 복잡한 코드 설명
- 특정 접근 방식을 선택한 이유 설명
- 알아야 할 문서 에지 사례
- 지원 참조 자료에 대한 링크 제공
일부 주석은 PowerShell에서 특별한 의미를 갖습니다. 특별 설명을참조하세요.
PowerShell 주석 스타일
PowerShell은 다음 두 가지 주석 스타일을 지원합니다.
있습니다. 텍스트(공백 포함)가 주석의 일부가 아닌 경우
#
앞에 올 수 있습니다. 주석 처리되지 않은 소스 코드와 동일한 줄에 배치된 한 줄 주석을 줄 끝 주석이라고 합니다.있습니다. 블록 주석은 여러 줄에 걸쳐 있을 수 있으며 주석 처리되지 않은 소스 코드의 앞, 후 또는 중간에 포함할 수 있습니다. 블록 내의 모든 텍스트는 공백을 포함하여 동일한 주석의 일부로 처리됩니다.
중요하다
블록 주석 내에 한 줄 주석을 포함할 수 있습니다. 그러나 블록 주석은 중첩할 수 없습니다. 블록 주석을 중첩하려고 하면, 외부 블록 주석은 첫 번째로 발견되는
#>
에서 종료됩니다.
예제
예제 1: 한 줄 주석
# This is a single-line comment.
# This is also a single-line comment.
예제 2: 메모 차단
<#
This is a block comment.
Text within the block is a part of the same comment.
Whitespace is unimportant in a block comment.
#>
예제 3: 줄 끝 주석
$var = 4 # This is an end-of-line comment
예제 4: 인라인 블록 주석
'Foo'; <# This is an inline block comment #> 'Bar'
예제 5: 전체 예제
<#
.DESCRIPTION
Demonstrates PowerShell's different comment styles.
#>
param (
[string] $Param1, # End-of-line comment
<# Inline block comment #> $Param2
)
$var = 1, <# Inline block comment #> 2, 2
# Single-line comment.
# Another single-line comment.
$var.Where(
<# Arg1 note #> { $_ -eq 2 },
<# Arg2 note #> 'First',
<# Arg3 note #> 1
)
특별 메모
PowerShell에는 특정 사용을 지원하는 몇 가지 주석 키워드가 포함되어 있습니다.
주석 기반 도움말
한 줄 또는 블록 주석을 사용하여 함수 및 스크립트에 대한 주석 기반 도움말 콘텐츠를 작성할 수 있습니다. 사용자는 Get-Help cmdlet을 사용하여 함수 또는 스크립트에 대한 주석 기반 도움말을 볼 수 있습니다. PowerShell은 설명 및 예제 사용과 같은 정보를 제공하는 데 사용할 수 있는 15개의 주석 키워드를 정의합니다.
<#
.DESCRIPTION
Comment-based help using a block comment.
#>
function Get-Function { }
# .DESCRIPTION
# Comment-based help using multiple single-line comments.
function Get-Function { }
자세한 내용은 다음을 참조하세요.
#Requires
#Requires
문은 현재 PowerShell 세션이 지정된 필수 구성 요소를 충족하지 않는 한 스크립트가 실행되지 않도록 합니다.
#Requires
스크립트의 모든 줄에 나타날 수 있지만 위치에 관계없이 동일한 방식으로 처리됩니다.
#Requires -Modules AzureRM.Netcore
#Requires -Version 6.0
param (
[Parameter(Mandatory)]
[string[]] $Path
)
자세한 내용은 about_Requires참고하십시오.
서명 블록
스크립트는 PowerShell 실행 정책을 준수할 수 있도록 서명할 수 있습니다. 서명되면 서명 블록이 스크립트의 끝에 추가됩니다. 이 블록은 스크립트가 실행되기 전에 PowerShell에서 읽는 여러 단일 줄 주석의 형태를 취합니다.
# SIG # Begin signature block
# ...
# SIG # End signature block
자세한 내용은 서명 정보을 참조하세요.
셰뱅
Unix와 유사한 시스템에서 shebang(#!
)는 스크립트의 시작 부분에서 스크립트를 실행하는 데 사용해야 하는 셸을 나타내는 데 사용되는 지시문입니다.
Shebang은 PowerShell 언어의 일부가 아닙니다. PowerShell은 이를 일반 주석으로 해석합니다. Shebang은 운영 체제에 의해 해석됩니다.
다음 예제에서 shebang은 비 PowerShell 컨텍스트에서 스크립트를 호출할 때 PowerShell이 스크립트를 실행하도록 합니다.
#!/usr/bin/env pwsh
Write-Host 'Begin script'
코드 편집기 영역 표식
일부 코드 편집기에서는 코드 섹션을 축소하고 확장할 수 있는 지역 표식을 지원합니다. PowerShell의 경우 지역 표식은 #region
시작하여 #endregion
끝나는 주석입니다. 영역 표식은 선의 시작 부분에 있어야 합니다. 지역 표식은 PowerShell ISE 및 PowerShell 확장을 사용하는 Visual Studio Code에서 지원됩니다. 지역 표식은 PowerShell 언어의 일부가 아닙니다. PowerShell은 이를 일반 주석으로 해석합니다.
자세한 내용은 Visual Studio Code 설명서에서
문자열 토큰의 주석
#
및 <# #>
확장 가능한 또는 축자 문자열 내에서 특별한 의미가 없습니다. PowerShell은 문자 그대로 문자를 해석합니다.
PS> '# This is not interpreted as a comment.'
# This is not interpreted as a comment.
PS> "This is <# also not interpreted #> as a comment."
This is <# also not interpreted #> as a comment.
그러나 특정 PowerShell 기능은 주석이 포함된 문자열로 작동하도록 설계되었습니다. 주석 해석은 특정 기능에 따라 달라집니다.
정규식 주석
PowerShell의 정규 표현식(Regex)은 두 가지 주석 스타일을 지원하는 .NET Regex 엔진을 사용합니다.
- 인라인 주석(
(?#)
) - 줄 끝 주석(
#
)
Regex 주석은 PowerShell의 모든 regex 기반 기능에서 지원됩니다. 예를 들어:
PS> 'book' -match '(?# This is an inline comment)oo'
True
PS> 'book' -match '(?x)oo# This is an end-of-line comment'
True
PS> $regex = 'oo # This is an end-of-line comment'
PS> 'book' -split $regex, 0, 'IgnorePatternWhitespace'
b
k
메모
줄 끝에 있는 정규식 주석에는 (?x)
형식이나 IgnorePatternWhitespace
옵션이 필요합니다.
자세한 내용은 다음을 참조하세요.
JSON 주석
PowerShell 6.0부터 ConvertFrom-Json cmdlet은 다음 JSON 주석 스타일을 지원합니다.
- 한 줄 주석(
//
) - 블록 주석(
/* */
)
메모
Invoke-RestMethod cmdlet은 수신된 JSON 데이터를 자동으로 역직렬화합니다. PowerShell 6.0 이상에서는 JSON 데이터에서 주석이 허용됩니다.
예를 들어:
'{
"Foo": "Bar" // This is a single-line comment
}' | ConvertFrom-Json
Foo
---
Bar
경고
PowerShell 7.4부터 Test-Json cmdlet은 주석이 있는 JSON을 더 이상 지원하지 않습니다. JSON에 주석이 포함된 경우 오류가 반환됩니다. 7.4 이전의 지원되는 버전에서는 Test-Json
가 주석이 있는 JSON을 성공적으로 구문 분석합니다. PowerShell 7.5에서 Test-Json
JSON 주석을 무시하는 옵션이 포함되어 있습니다.
CSV 주석
Import-Csv 및 ConvertFrom-Csv W3C 확장 로그 형식을 지원합니다.
해시 문자(#
)로 시작하는 줄은 주석으로 처리되며 주석이 #Fields:
시작하고 열 이름의 구분된 목록을 포함하지 않는 한 무시됩니다. 이 경우 cmdlet은 해당 열 이름을 사용합니다. Windows IIS 및 기타 웹 서버 로그의 표준 형식입니다. 자세한 내용은 확장 로그 파일 형식
@'
# This is a CSV comment
Col1,Col2
Val1,Val2
'@ | ConvertFrom-Csv
Col1 Col2
---- ----
Val1 Val2
Windows PowerShell 5.1에서 기본 Export-Csv 및 ConvertTo-Csv 동작은 형식 정보를 #TYPE
주석 형식으로 포함하는 것입니다.
PowerShell 6.0부터 기본값은 주석을 포함하지 않지만, "IncludeTypeInformation" 매개 변수를 사용하여 이를 재정의할 수 있습니다.
[pscustomobject] @{ Foo = 'Bar' } | ConvertTo-Csv -IncludeTypeInformation
#TYPE System.Management.Automation.PSCustomObject
"Foo"
"Bar"
#TYPE
주석이 CSV 데이터에 포함된 경우 Import-Csv
및 ConvertFrom-Csv
이 정보를 사용하여 역직렬화된 개체의 pstypenames
속성을 설정합니다.
class Test { $Foo = 'Bar' }
$test = [Test]::new()
$var = $test | ConvertTo-Csv -IncludeTypeInformation | ConvertFrom-Csv
$var.pstypenames
Test
CSV:Test
주석 ConvertFrom-StringData
문자열 데이터 안에서, ConvertFrom-StringData cmdlet은 #
으로 시작하는 줄을 주석으로 간주합니다. 자세한 내용은 다음을 참조하세요.
노트
블록 주석은 중첩할 수 없습니다. 다음 예제에서
Baz
주석의 일부가 아닙니다.<# 'Foo' <# 'Bar' #> 'Baz' #>
<# #>
한 줄 주석 내에서 특별한 의미가 없습니다.#
블록 주석 내에서 특별한 의미가 없습니다.주석으로 처리하려면 주석 문자가 주석이 아닌 토큰의 일부가 되어서는 안 됩니다. 다음 예제에서
#Bar
및<#Bar#>
Foo...
토큰의 일부입니다. 따라서 주석으로 처리되지 않습니다.PS> Foo#Bar Foo#Bar: The term 'Foo#Bar' is not recognized as a name [...] PS> Foo<#Bar#> Foo<#Bar#>: The term 'Foo<#Bar#>' is not recognized as a name [...]
PowerShell