Quoting Rules

blimeyoops·2023년 7월 6일

powershell

목록 보기
5/8

따옴표는 문자열을 지정하는 데 사용된다. 문자열을 작은따옴표 또는 큰따옴표로 묶을 수 있는데 두개의 사용법의 차이는 다음과 같다.

  • 작은따옴표: 감싸진 문자열은 변화 없이 그대로 출력
  • 큰따옴표: 변수가 실제 값으로 치환된 후 출력
$str = 'world'
Write-Host "hello $str" # hello world
Write-Host 'hello $str' # hello $str

역따옴표 `를 사용하여 큰따옴표를 이스케이프 처리

`(백틱)은 PowerShell에서 이스케이프 문자로 작동한다. 문자열이나 스크립트에서 큰따옴표를 이스케이프 처리하는 데 사용할 수 있다.

Write-Host "`"Welcome to PowerShell Tutorial`""

## Output
## "Welcome to PowerShell Tutorial"

또는 작은따옴표를 사용해서 큰따옴표를 이스케이스 할 수 있다.

Write-Host '"Welcome to PowerShell Tutorial"'

## Output
## "Welcome to PowerShell Tutorial"

작은따옴표를 이스케이프하려면 큰따옴표 "" 사용

문자열을 큰따옴표로 묶어 작은따옴표를 이스케이프할 수 있다.

Write-Host "'Welcome to PowerShell Tutorial'"

## Output
## 'Welcome to PowerShell Tutorial'

큰따옴표 사용한 Foreach-Object 속성 출력

파이프라인으로 전달된 Array 개체를 Foreach-Object cmdlet을 사용하면 각 개체에 대해 특정 작업을 실행할 수 있다. $_ 를 사용하면 Foreach-Object 내에서 각 개체의 속성에 접근할 수 있다.

Get-Process | Select-Object -First 3 | ForEach-Object{
    "Process Name : $_.ProcessName"
}

## Output
## Process Name : System.Diagnostics.Process (Aac3572DramHal_x86).ProcessName
## Process Name : System.Diagnostics.Process (Aac3572MbHal_x86).ProcessName
## Process Name : System.Diagnostics.Process (Aac3572MbHal_x86).ProcessName

위 스크립트에서 $_를 사용해 각 개체의 그런데 큰따옴표는 변수가 실제 값으로 치환된 후 출력되어야 하는데 위 스크립트의 실행결과를 보면 실제 변수로 인식된 부분은 $_부분만 변수로 인식되어 .ProcessName 문자열이 출력된다. 따라서 이경우 $( )로 해당 부분을 묶어 하나의 변수로 인식되어야 한다는 것을 알려준다.

Get-Process | Select-Object -First 3 | ForEach-Object{
    "Process Name : $($_.ProcessName)"
}

## Output
## Process Name : Aac3572DramHal_x86
## Process Name : Aac3572MbHal_x86
## Process Name : Aac3572MbHal_x86

0개의 댓글