본문 바로가기
C.W.K.
Stream
Lesson 01 of 05 · published

중괄호 확장과 고급 글로브

~10 min · brace, glob, extglob

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

중괄호 확장은 문자열을 만들어

echo {a,b,c}.txt          # a.txt b.txt c.txt
echo {1..5}                # 1 2 3 4 5
echo {01..05}              # 01 02 03 04 05
echo {1..10..2}            # 1 3 5 7 9
echo {a..e}                # a b c d e
mkdir -p project/{src,test,docs}/{2025,2026}

중괄호 확장은 파일 시스템을 조회하기 전에 문자열 후보를 만들어. 아직 존재하지 않는 디렉터리 이름도 펼칠 수 있어 디렉터리 뼈대를 만들 때 편해. 조합이 많다면 실행 전에 printf로 최종 인자를 확인해.

하위 디렉터리까지 찾는 재귀 글로브

ls **/*.py                # zsh; bash는 shopt -s globstar 필요
ls src/**/*.{ts,tsx}       # 중괄호 확장과 결합

**는 디렉터리 경계를 넘어 이름을 찾아. 짧은 대화형 탐색에는 편하지만 큰 트리에서는 셸이 많은 경로를 인자로 펼쳐 인자 길이 제한에 닿을 수 있어. 복잡한 조건이나 흐름 처리가 필요하면 findfd를 사용해.

zsh 글로브 한정자

ls *(.)                   # 일반 파일만
ls *(/)                   # 디렉터리만
ls *(.om)                 # 일반 파일, 수정 시각 최신순
ls *(.OL[1,5])            # 가장 큰 일반 파일 5개
ls *(.m-1)                # 최근 하루 안에 수정된 일반 파일

zsh 전용 문법으로 파일 종류, 정렬, 범위를 한 패턴에 표현해. 짧지만 다른 셸로 옮길 스크립트에서는 같은 뜻의 명시적 명령을 쓰는 편이 읽기 쉬워.

bash의 extglob

shopt -s extglob
ls !(*.txt)                # .txt가 아닌 항목
ls @(foo|bar).log          # foo.log 또는 bar.log
ls *(foo|bar)              # foo나 bar가 0회 이상

extglob은 zsh의 확장 패턴과 비슷한 선택 표현을 bash에 제공해. 기본으로 꺼져 있으므로 shopt -s extglob을 먼저 실행해야 해.

확장 순서를 머릿속에서 따라가

셸은 중괄호 확장으로 문자열을 만들고, 매개변수·명령·산술 확장과 경로명 확장을 차례로 적용해. 따옴표, 셸 옵션, 현재 디렉터리가 패턴을 펼칠지 그대로 남길지 결정해. 상태를 바꾸는 명령 전에는 printf '<%s>\n' ...로 최종 인자를 출력해 봐.

일치하는 파일이 없을 때의 동작도 달라

bash와 zsh는 일치하지 않은 패턴을 글자 그대로 남기거나 오류로 처리하거나 빈 목록으로 바꾸는 방식이 다르고, 셸 옵션으로 그 동작을 또 바꿀 수 있어. 대상 셸과 옵션에서 직접 시험하고, 변경 작업을 반복하기 전에 빈 결과를 명시적으로 처리해.

Code

한 줄로 프로젝트 골격·bash
mkdir -p project/{src,tests,docs}/{python,rust}
find project -type d

External links

Exercise

mkdir -p sandbox/{a,b,c}/{1,2,3}로 시험 트리를 만들고 tree sandbox로 확장 결과를 확인해. zsh에서 ls sandbox/**/*가 어떤 항목을 고르는지 본 다음, 시험 Python 파일을 만들어 크기 순으로 상위 다섯 개를 선택하는 glob qualifier도 검증해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.