$0/$1/$2 로 여러 인수 다루기
위치 인수($0, $1, $2 …)는 커스텀 커맨드에 넘긴 인수를 스페이스 기준으로 나눠 순서대로 참조하는 구조입니다. @ 파일 참조와 조합하는 법, 인수가 부족할 때의 동작, 스페이스가 든 값을 따옴표로 넘기는 법을 다룹니다.
위치 인수($0, $1, $2 …)는 커스텀 커맨드에 넘긴 인수를 스페이스 기준으로 나눠 순서대로 참조하는 구조입니다. 인수 전체를 한 덩어리로 받는 $ARGUMENTS 와 달리 "무엇을" "어디로"처럼 역할이 다른 값을 따로따로 받을 수 있어, 파라미터가 여러 개인 커맨드를 만들 때 쓰입니다.
인수 전체를 한 번에 받는 방법은 $ARGUMENTS 로 인수 받기에서 다뤘습니다. 이 글에서는 그 인수를 하나씩 나눠 받는 방법을 봅니다.
핵심 요약
$0,$1,$2로 첫 번째·두 번째·세 번째 인수를 개별로 참조합니다.- 인수는 스페이스 기준으로 자동 분할됩니다.
- 인수가 부족하면 해당
$N은 치환되지 않고 플레이스홀더 문자열이 그대로 남습니다. - 스페이스가 든 값은 더블 쿼트로 감싸면 하나의 인수가 됩니다.
위치 인수는 어떻게 전개되나
$0 이 첫 번째, $1 이 두 번째, $2 가 세 번째 인수입니다.
---
description: 파일을 리네임
---
$0 를 $1 로 리네임해 주세요.이 커맨드(.claude/commands/rename.md)를 /rename old-name.ts new-name.ts 로 실행하면 다음처럼 전개됩니다.
| 플레이스홀더 | 값 |
|---|---|
$0 | old-name.ts |
$1 | new-name.ts |
결과적으로 "old-name.ts 를 new-name.ts 로 리네임해 주세요."라는 프롬프트가 Claude에게 전달됩니다.
언제 $ARGUMENTS 대신 위치 인수를 쓰나
위치 인수가 알맞은 것은 인수의 역할이 명확히 나뉘는 경우입니다.
---
description: 파일을 지정 디렉터리로 이동
---
$0 를 $1 디렉터리로 이동해 주세요."무엇을" "어디로"라는 두 정보를 분리해 프롬프트의 서로 다른 자리에 꽂을 수 있는 것이 위치 인수의 특징입니다. 반면 에러 메시지처럼 텍스트 덩어리 하나를 받을 때는 $ARGUMENTS 가 더 간단합니다.
| 상황 | 알맞은 방식 |
|---|---|
| 에러 메시지, 검색 키워드 등 덩어리 하나 | $ARGUMENTS |
| 원본과 대상, 브랜치와 카테고리처럼 역할이 나뉘는 값 | $0, $1, $2 |
실전 예 — @ 파일 참조와 조합하기
@ 파일 참조와 조합하면 인수로 받은 경로의 파일 내용을 컨텍스트에 읽어 들일 수 있습니다.
---
description: 두 파일을 비교
argument-hint: [파일1] [파일2]
---
@$0 와 @$1 를 비교하고, 차분을 설명해 주세요.
특히 중요한 차이가 있으면 강조해 주세요./compare src/old.ts src/new.ts 로 실행하면 @src/old.ts 와 @src/new.ts 로 전개되어 두 파일 내용이 컨텍스트에 들어가고, Claude에게서 상세한 차분 설명을 얻을 수 있습니다. argument-hint 를 함께 설정해 둔 것은 후보 목록에서 인수 두 개가 필요하다는 것을 보여 주기 위해서입니다. 이 항목은 커스텀 커맨드 프론트매터 설정에서 다뤘습니다.
인수가 부족하면 어떻게 되나
지정한 위치에 인수가 없으면 그 $N 은 빈 문자열이 되지 않고 플레이스홀더 문자열이 그대로 남습니다.
$0 님, $1 건에 대해 여쭙겠습니다.이 커맨드(.claude/commands/greet.md)를 /greet 김철수 처럼 인수 하나만으로 실행하면 결과는 이렇게 됩니다.
김철수 님, $1 건에 대해 여쭙겠습니다.$1 이라는 문자열이 그대로 남아 Claude에게 의미를 알 수 없는 토큰이 넘어갑니다. 대비책은 두 가지입니다.
argument-hint로 필요한 인수를 후보 목록에 명시해 빠뜨리지 않게 합니다.- 프롬프트 안에 "인수가 비어 있으면 사용자에게 물어볼 것"처럼 Claude에게 판단을 맡기는 지시를 적어 둡니다.
스페이스가 든 값은 어떻게 넘기나
위치 인수는 셸 스타일의 쿼트 해석을 지원합니다. 스페이스가 든 값을 더블 쿼트로 감싸면 하나의 인수로 넘어갑니다.
/my-skill "hello world" second| 플레이스홀더 | 값 |
|---|---|
$0 | hello world (쿼트는 벗겨짐) |
$1 | second |
쿼트가 그대로 인수의 일부로 남는 것은 $ARGUMENTS 뿐입니다. 같은 입력이라도 $ARGUMENTS 에는 "hello world" second 가 통째로 들어간다는 점을 기억해 두세요.
응용 예 — PR 리뷰 준비 커맨드
서로 다른 파라미터를 여러 개 받는 커맨드에서 위치 인수가 빛을 발합니다.
---
description: PR 리뷰용 정보를 준비
argument-hint: [브랜치명] [변경 카테고리]
---
PR 작성 전 정보를 준비해 주세요.
- 브랜치: $0
- 카테고리: $1 (feat/fix/refactor/docs)
아래를 실행해 주세요:
1. main과의 차분 파일 일람을 표시
2. 차분 내용을 분석
3. 간결한 PR 설명문을 생성/prepare-pr feature/login feat 처럼 실행하면 브랜치명과 카테고리가 각자 자리에 들어갑니다. 이 커맨드에 allowed-tools: Bash(git:*) 를 더하면 git 조작의 확인 프롬프트까지 생략할 수 있습니다.
정리
- 위치 인수
$0,$1,$2는 인수를 스페이스 기준으로 나눠 순서대로 받으며, 역할이 나뉘는 파라미터에 알맞습니다. @$0처럼 파일 참조와 조합하면 인수로 받은 파일을 컨텍스트에 읽어 들일 수 있습니다.- 인수가 부족하면
$N이 그대로 남으니argument-hint와 프롬프트 내 보완 지시로 대비합니다. - 스페이스가 든 값은 더블 쿼트로 감싸 넘기고, 쿼트가 그대로 남는 것은
$ARGUMENTS뿐입니다. - 커스텀 커맨드 코스는 여기까지입니다. 참조 파일과 스크립트까지 묶어 Claude가 알아서 꺼내 쓰게 하려면 SKILL.md 작성법으로, 커맨드와 스킬을 언제 나눠 쓸지는 슬래시 명령어와 Skills로 이어집니다.
자주 묻는 질문
팀에 Claude Code를 도입하려면 실제 코드베이스에 맞춘 설계가 필요합니다.
무료 상담 신청