본문 바로가기
C.W.K.
Stream
Lesson 04 of 10 · published

별칭과 함수 선택하기

~10 min · alias, function

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

명령을 줄이는 두 가지 방법

별칭은 입력한 이름을 미리 정한 문자열로 바꾸는 기능이야. 예를 들어 alias ll='ls -lah'를 정의하면 ll을 입력했을 때 셸이 이를 ls -lah로 바꿔 실행해. 함수는 인자를 받고 조건을 판단하며 다른 명령도 호출할 수 있는 작은 프로그램이야.

별칭을 정의하고 지우는 법

  • alias name='command'처럼 이름과 바꿀 명령을 적어서 별칭을 정의해.
  • = 양옆에 공백을 넣으면 별칭 정의로 해석되지 않으므로 붙여 써야 해.
  • 정의하는 순간 변수나 명령 치환이 펼쳐지지 않게 하려면 값 전체를 작은따옴표로 감싸는 편이 안전해.
  • 별칭은 기본적으로 텍스트 치환이므로 전달받은 인자를 검사하거나 순서를 바꾸기 어려워. 그런 작업은 함수로 작성해.
  • unalias name을 실행하면 해당 별칭을 지울 수 있어.
  • 인자 없이 alias를 실행하면 현재 정의된 별칭을 모두 볼 수 있어.

함수를 정의하고 인자를 받는 법

  • name() { commands; }는 POSIX 셸에서도 사용할 수 있는 함수 정의 형식이야.
  • function name { commands; } 형식은 bash와 zsh에서 사용할 수 있어.
  • $1, $2는 첫 번째와 두 번째 인자를 가리키고, $@는 전달받은 모든 인자를 각각의 경계를 유지한 채 나타내.
  • local var=value를 사용하면 변수의 범위를 함수 안으로 제한할 수 있어.
  • unset -f name을 실행하면 정의한 함수를 지울 수 있어.

책임의 크기에 맞춰 골라

  • 기존 명령에 고정된 플래그 몇 개만 붙이고 싶다면 별칭이면 충분해.
  • 인자를 검사하거나 순서를 바꿔야 한다면 함수로 작성해.
  • 여러 명령을 순서대로 실행하거나 조건과 오류를 처리해야 한다면 함수를 사용해.
  • 긴 명령을 짧은 이름 하나로 바꾸는 정도라면 별칭이 읽기 쉽고 관리하기도 편해.

자주 쓰는 형태

alias ll='ls -lah'
alias gst='git status'
alias gco='git checkout'
alias ports='lsof -iTCP -sTCP:LISTEN -P -n'

mkcd() { mkdir -p "$1" && cd "$1"; }
extract() {
  case "$1" in
    *.tar.gz|*.tgz) tar xzf "$1" ;;
    *.zip)          unzip "$1" ;;
    *.tar.bz2)      tar xjf "$1" ;;
    *) echo 'unknown archive' ;;
  esac
}

별칭은 텍스트를 바꾸고 함수는 동작을 맡아

별칭은 셸이 명령줄을 해석하는 초기에 이름을 바꾸기 때문에 인자를 검증하거나 지역 변수를 다루기 어려워. 고정된 짧은 옵션에는 별칭이 알맞고, 인자를 해석하거나 조건과 오류를 처리해야 한다면 함수로 올려. 이름이 얼마나 짧은지가 아니라 맡은 책임이 얼마나 큰지를 기준으로 나누면 돼.

위험한 동작은 이름에서 드러나게 해

강제 push, 재귀 삭제, 운영 환경 접속을 한두 글자 별칭으로 숨기면 습관적으로 입력하다가 확인 절차를 건너뛸 수 있어. 편의 함수 안에서도 작업 대상을 먼저 출력하고 명시적으로 확인하는 단계를 남겨. 빨리 실행되는 명령보다 멈춰야 할 지점이 보이는 명령이 더 안전해.

Code

추가 후 사용·bash
alias ll='ls -lah'
ll ~
mkcd() { mkdir -p "$1" && cd "$1"; }
mkcd ~/sandbox/2026/05
pwd

External links

Exercise

시험용 셸 설정에 ll, gst, ports 별칭과 mkcd 함수를 추가해. exec zsh로 새 셸을 시작한 뒤 각 이름이 의도한 명령으로 확장되는지 확인하고, 위험한 옵션을 별칭 안에 숨기지 않았는지도 검토해.

Progress

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

댓글 0

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

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