본문 바로가기
claudecode.to
문서 목록
커스텀 커맨드 코스중급

$0/$1/$2 로 여러 인수 다루기

위치 인수($0, $1, $2 …)는 커스텀 커맨드에 넘긴 인수를 스페이스 기준으로 나눠 순서대로 참조하는 구조입니다. @ 파일 참조와 조합하는 법, 인수가 부족할 때의 동작, 스페이스가 든 값을 따옴표로 넘기는 법을 다룹니다.

9분2026-08-22 갱신

위치 인수($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 로 실행하면 다음처럼 전개됩니다.

플레이스홀더
$0old-name.ts
$1new-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에게 의미를 알 수 없는 토큰이 넘어갑니다. 대비책은 두 가지입니다.

  1. argument-hint 로 필요한 인수를 후보 목록에 명시해 빠뜨리지 않게 합니다.
  2. 프롬프트 안에 "인수가 비어 있으면 사용자에게 물어볼 것"처럼 Claude에게 판단을 맡기는 지시를 적어 둡니다.

스페이스가 든 값은 어떻게 넘기나

위치 인수는 셸 스타일의 쿼트 해석을 지원합니다. 스페이스가 든 값을 더블 쿼트로 감싸면 하나의 인수로 넘어갑니다.

/my-skill "hello world" second
플레이스홀더
$0hello world (쿼트는 벗겨짐)
$1second

쿼트가 그대로 인수의 일부로 남는 것은 $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로 이어집니다.

자주 묻는 질문

커스텀 커맨드위치 인수$0인수

팀에 Claude Code를 도입하려면 실제 코드베이스에 맞춘 설계가 필요합니다.

무료 상담 신청