비교 연산자는 글자로 쓴다
>와 <는 리다이렉션이 가져갔기 때문에 비교는 -로 시작하는 낱말로 쓴다.
| 연산자 | 뜻 |
|---|---|
-eq -ne | 같다, 다르다 |
-gt -ge -lt -le | 크다, 크거나 같다, 작다, 작거나 같다 |
-like -notlike | 와일드카드(*, ?) 비교 |
-match -notmatch | 정규 표현식 비교 |
-contains -in | 모음 안에 값이 있는가 |
-is -isnot | 형식이 맞는가 |
'abc' -like 'a*' # True
2 -in 1, 2, 3 # True
1, 2, 3 -contains 2 # True
42 -is [int] # True
-contains와 -in은 같은 일을 하고 좌우만 반대다. 읽기 자연스러운 쪽을 쓴다.
대소문자를 가리지 않는다
문자열 비교는 기본으로 대소문자를 가리지 않는다. 가리려면 앞에 c를 붙인다.
'a' -eq 'A' # True
'a' -ceq 'A' # False
-clike, -cmatch, -ccontains도 같다. 가리지 않는다는 것을 드러내고 싶으면 i를 붙인 -ieq를 쓴다.
왼쪽이 배열이면 걸러 낸다
비교 연산자의 왼쪽이 배열이면 참·거짓이 아니라 조건에 맞는 원소들이 나온다.
1, 2, 3, 4 -gt 2
3
4
편리하지만 함정도 된다. $null인지 확인할 때 변수가 배열이면 엉뚱한 결과가 나온다. 그래서 $null은 왼쪽에 쓴다.
if ($null -eq $value) { 'empty' }
논리 연산자
-and, -or, -not(또는 !), -xor. 왼쪽에서 결과가 정해지면 오른쪽은 계산하지 않는다.
if ((Test-Path ./config.json) -and (Get-Item ./config.json).Length -gt 0) { 'ok' }
명령의 결과를 조건에 쓸 때는 괄호로 감싼다. 감싸지 않으면 -and가 앞 명령의 매개변수로 읽힌다.
PowerShell 7에서 생긴 것들
삼항 연산자. if/else를 한 줄로 쓴다.
$type = $item.PSIsContainer ? 'Directory' : 'File'
null 병합 ??. 왼쪽이 $null이면 오른쪽 값을 쓴다. 기본값을 줄 때 쓴다.
$port = $env:APP_PORT ?? 8080
null 병합 대입 ??=. 변수가 $null일 때만 값을 넣는다.
$cache ??= @{}
null 조건부 ?. 와 ?[]. 개체가 $null이면 오류 없이 $null을 돌려준다. 변수 이름에 ?가 들어갈 수 있어서, 이름을 중괄호로 감싸야 한다.
${user}?.Name
${list}?[0]
파이프라인 연결 &&, ||. 앞 명령이 성공하면(실패하면) 뒤를 실행한다. 외부 프로그램을 이어 부를 때 쓴다.
git fetch && git rebase origin/main
npm test || Write-Warning '테스트 실패'
여기서 성공과 실패는 명령이 오류 없이 끝났는가이지, 돌려준 값이 참인가가 아니다. Test-Path ./dist || New-Item ./dist는 뜻대로 되지 않는다. Test-Path는 False를 돌려줄 뿐 실패한 것이 아니어서 뒤가 실행되지 않는다. 값으로 갈라야 하면 if를 쓴다.
위의 연산자들은 Windows PowerShell 5.1에 없다. 5.1에서도 돌아야 하는 스크립트라면 쓰지 않는다.
문자열 연산자
메서드를 부르지 않고도 자르고 붙이고 바꿀 수 있다.
'a,b,c' -split ',' # a b c
'a', 'b', 'c' -join '-' # a-b-c
'2026-10-04' -replace '-', '/' # 2026/10/04
'{0}: {1:N0}원' -f '합계', 12500 # 합계: 12,500원
-split과 -replace는 정규 표현식을 받는다. .이나 |처럼 정규식에서 뜻이 있는 글자로 자를 때는 \를 붙이거나 [regex]::Escape()를 쓴다. 정규식은 다음 글에서 다룬다.
범위 연산자
..는 연속한 값의 배열을 만든다. 글자에도 된다.
1..5 # 1 2 3 4 5
5..1 # 5 4 3 2 1
'a'..'e' # a b c d e
다음 글: 정규 표현식