GrepBoard/매뉴얼
47 편 ·

Claude Code 커스텀 슬래시 명령에 인자 넘기기

·Claude Code 2.1.302 · Ubuntu 24.04·7 단계

.claude/commands 의 마크다운 파일에 $ARGUMENTS · $0 · $1 · 이름 붙인 인자를 넣고, 공백이 든 값과 빠진 인자가 어떻게 치환되는지 확인합니다.

/x foo bar 처럼 명령 뒤에 적은 값을 프롬프트 안에서 쓰려면 파일 본문에 자리표시자를 넣습니다. 아래 출력은 2.1.302 에서 claude -p 를 4번 돌려 얻은 것입니다.

[1] .claude/commands/ 에 마크다운 파일을 만듭니다. 파일 이름(확장자 뺀 부분)이 명령 이름입니다. 하위 폴더를 두면 /폴더:이름 이 됩니다.

.claude/commands/x.md
---description: Echo argumentsargument-hint: [first] [second]---Reply with exactly this one line and nothing else:ALL=[$ARGUMENTS] ZERO=[$0] ONE=[$1] TWO=[$2]

argument-hint 는 자동완성 때 보이는 안내 문구일 뿐 치환과는 상관이 없습니다.

[2] 인자를 붙여 실행합니다.

console
$ claude -p "/x foo bar" --max-turns 1ALL=[foo bar] ZERO=[foo] ONE=[bar] TWO=[$2]

$ARGUMENTS 는 입력한 문자열 전체이고, $0 이 첫 번째 인자, $1 이 두 번째입니다. 번호는 0 부터 셉니다. $1 을 첫 번째로 생각하고 쓰면 한 칸씩 밀립니다.

[3] 공백이 든 값은 따옴표로 묶습니다. 번호 붙은 인자는 셸처럼 따옴표를 해석합니다.

console
$ claude -p '/x "hello world" second' --max-turns 1ALL=["hello world" second] ZERO=[hello world] ONE=[second] TWO=[$2]

$ARGUMENTS 에는 따옴표가 입력한 그대로 남습니다. 파일 경로나 문장을 한 덩어리로 받으려면 $0 쪽이 맞고, 나머지를 통째로 프롬프트에 붙일 때는 $ARGUMENTS 가 맞습니다.

[4] 위치 대신 이름으로 받으려면 frontmatter 에 arguments 를 선언합니다. 공백으로 구분한 문자열이나 YAML 목록 모두 됩니다. 이름은 선언한 순서대로 인자 위치에 대응합니다.

.claude/commands/z.md
---description: Named argsarguments: [issue, branch]---Reply with exactly this one line and nothing else:ISSUE=[$issue] BRANCH=[$branch]
console
$ claude -p "/z 42 fix-login" --max-turns 1ISSUE=[42] BRANCH=[fix-login]

[5] 자리표시자를 하나도 안 쓴 명령에 인자를 주면, 공식 문서 기준으로 본문 끝에 ARGUMENTS: <입력한 값> 한 줄이 붙습니다. 값이 버려지지는 않지만, 위치를 정해 쓰고 싶다면 자리표시자를 넣어야 합니다. 이 동작은 직접 돌리지 않았습니다.

[6] 본문에 $ 와 숫자를 글자 그대로 쓰고 싶으면($1.00 같은 금액) 앞에 \ 를 붙여 \$1.00 으로 씁니다. 반대로 사용자가 넘긴 값 안에 $1 이나 $ARGUMENTS 가 들어 있어도 다시 치환하지 않고 글자 그대로 들어갑니다. 둘 다 공식 문서의 설명입니다.

[7] 명령이 안 뜨거나 값이 안 들어오면 다음을 봅니다.

증상확인할 곳
/이름 이 없음파일이 .claude/commands/ 바로 아래(또는 하위 폴더)에 있고 확장자가 .md 인지. 하위 폴더면 /폴더:이름
같은 이름의 스킬이 있음이름이 겹치면 스킬이 실행됨(문서)
frontmatter 필드가 안 먹음필드 이름은 하이픈까지 정확히 맞아야 하고, 모르는 이름은 오류 없이 무시됨(문서). arguments 를 argument 로 쓰면 이름 인자가 선언되지 않음
frontmatter 가 본문으로 나옴여는 --- 가 파일 첫 줄이 아니면 --- 까지 전부 본문으로 취급됨(문서)
YAML 이 깨짐필드 없이 본문만 로드됨(문서)

frontmatter 앞에 빈 줄을 넣은 파일(w.md)도 시험했는데, 응답 형식이 같아서 frontmatter 가 본문으로 들어갔는지는 이 출력만으로 구별하지 못했습니다. 문서의 설명을 따르고 첫 줄을 --- 로 시작하는 쪽이 안전합니다.

.claude/commands/ 파일과 .claude/skills/<이름>/SKILL.md 는 같은 /이름 을 만들고 인자 문법도 같습니다. 새로 만들 때는 문서가 스킬을 권합니다. 스킬이 안 뜨는 경우는 Claude Code 스킬이 안 뜨거나 안 쓰일 때에 정리했습니다.

#claude-code#slash-commands#arguments