개요
PowerShell 문자열은 어떤 따옴표를 쓰느냐에 따라 동작이 완전히 달라진다. 작은따옴표('...')는 안의 내용을 있는 그대로 문자 그대로(literal) 취급하고, 큰따옴표("...")는 그 안의 변수·표현식을 실제 값으로 치환한다(문자열 전개, interpolation). 41장에서 만든 변수를 화면에 표시할 때 이미 이 차이를 스치듯 썼는데, 이 장은 그 규칙과 여러 줄 텍스트를 위한 Here-String을 정리한다.
정신 모델은 “큰따옴표는 내용을 매번 다시 해석하는 템플릿이고, 작은따옴표는 봉인된 문자 그대로의 상자"라는 것이다. 어느 쪽을 쓸지는 “이 문자열 안의 $ 기호를 변수로 해석해야 하는가"라는 질문 하나로 결정된다.
사용법
| |
종류
| 구문 | 전개 여부 | 용도 |
|---|---|---|
'...' | 안 됨 | 리터럴 문자열, 정규식 패턴(47장), 파일 경로 등 |
"..." | 됨 | 변수·표현식을 포함한 동적 문자열 |
`n, `t, ` | 이스케이프 문자(백틱) | 큰따옴표 안에서 줄바꿈·탭·백틱 자체를 표현 |
@"..."@ | 됨 | 여러 줄 텍스트(Here-String), 따옴표를 이스케이프할 필요 없음 |
@'...'@ | 안 됨 | 여러 줄 리터럴 텍스트 |
-f 연산자 | — | .NET 복합 서식 문자열로 값 정렬·자릿수 지정 |
예시
| |
주의사항·함정
Here-String의 닫는 태그는 반드시 줄 맨 앞에 와야 한다: @"나 @'로 연 뒤 마지막 줄의 "@(또는 '@)는 앞에 공백이나 다른 문자가 전혀 없이 그 줄의 첫 글자여야 한다. 들여쓰기된 코드 블록 안에 Here-String을 넣으면서 닫는 태그까지 함께 들여쓰면 파싱 오류가 난다 — 이는 이 저장소의 문서 작성 규칙에서 Here-String을 코드블록 예외로 다루는 이유이기도 하다.
작은따옴표 문자열에 작은따옴표 자체를 넣으려면 두 번 반복해야 한다: 'It''s'처럼 작은따옴표를 연달아 두 번 쓰면 하나의 작은따옴표로 이스케이프된다. 큰따옴표 문자열이라면 그냥 "It's"처럼 안에 작은따옴표를 그대로 써도 되므로, 아포스트로피가 포함된 텍스트는 큰따옴표를 쓰는 편이 간단할 때가 많다.
백슬래시는 PowerShell의 이스케이프 문자가 아니다: C나 Bash에 익숙하면 \n이 줄바꿈이라고 기대하기 쉽지만, PowerShell의 이스케이프 문자는 백틱(`)이다. "C:\temp\n"은 줄바꿈 없이 그대로 C:\temp\n이라는 문자열이 된다 — 줄바꿈이 필요하면 반드시 `n을 써야 한다. 이 차이를 모르면 파일 경로는 문제없이 동작하다가 줄바꿈만 안 되는 상황에서 원인을 찾기 어렵다.
이식성: Bash도 작은따옴표(리터럴)와 큰따옴표(변수 전개) 구분이 있어 개념적으로 가장 비슷하지만, 이스케이프 문자가 백슬래시라는 점이 다르다. CMD는 따옴표에 따른 전개 개념 자체가 없고 %var% 치환만 지원한다. PowerShell의 $() 하위 표현식 연산자처럼 문자열 안에서 임의의 코드를 실행해 삽입하는 기능은 Bash의 $(...), "$(cmd)"와 가장 유사하다.
![Featured image of post [PowerShell] 45. 문자열 서식과 Here-String](/post/powershell/string-formatting-here-string-powershell/wordcloud_hu_edb30a18b89e14f6.webp)
![[PowerShell] 43. ArrayList와 Generic List(List<T>)](/post/powershell/arraylist-generic-list-powershell/wordcloud_hu_a34550a6370cee87.webp)
![[PowerShell] 44. 해시테이블(Hashtable) 다루기](/post/powershell/hash-tables-powershell/wordcloud_hu_d1fd29269ce3c32d.webp)
![[PowerShell] 45. 문자열 서식과 Here-String](/post/powershell/string-formatting-here-string-powershell/wordcloud_hu_6a3265810b79b68e.webp)
![[PowerShell] 46. Select-String — 텍스트에서 패턴 찾기](/post/powershell/select-string-command-powershell/wordcloud_hu_76a0521c6b7afac7.webp)
![[PowerShell] 47. -match/-replace 연산자와 정규식](/post/powershell/match-replace-regex-powershell/wordcloud_hu_c39cd98b9fc6220f.webp)
![[PowerShell] 41. 변수와 데이터 타입](/post/powershell/variables-data-types-powershell/wordcloud_hu_6051f7a36d4700ee.webp)
![[PowerShell] 42. 배열과 컬렉션 기초](/post/powershell/arrays-collections-powershell/wordcloud_hu_c295cc73d4592ae5.webp)