개발 환경 및 프로젝트 관리/Linux 개념

Bash의 Special Parameters 정리

Data Jun 2025. 10. 9. 14:22

Bash 스크립트를 작성하다 보면 $1, $2 같은 Positional Parameters(위치 매개변수) 를 많이 사용합니다.
하지만 그 외에도 Bash에서는 특별한 의미를 가진 내장 변수(Special Parameters) 를 제공합니다.
이 변수들을 잘 활용하면 스크립트 제어와 디버깅이 훨씬 쉬워집니다.

 

Special Parameters란?

Special Parameters는 Bash에서 시스템적으로 미리 정의된 변수입니다.
사용자가 직접 할당하지 않아도, 스크립트 실행 시 자동으로 값이 채워집니다.

 

주요 Special Parameters 정리

변수 의미 예시
$0 현재 실행 중인 스크립트 이름 ./myscript.sh
$# 전달된 파라미터(인자)의 개수 인자가 3개면 3
$* 모든 인자(전체)를 하나의 문자열로 취급 "arg1 arg2 arg3"
$@ 모든 인자를 각각의 단어로 구분하여 취급 "arg1" "arg2" "arg3"
$? 최근 실행한 명령어의 exit status(종료 코드) 0이면 성공, 1 이상이면 오류
$$ 현재 실행 중인 shell PID (프로세스 ID) 예: 12345

 

 

$0, $#, $@, $* 예제

예를 들어 다음 스크립트를 작성해봅시다.

#!/bin/bash

echo "스크립트 이름: $0"
echo "인자 개수: $#"
echo "모든 인자(\$*): $*"
echo "모든 인자(\$@): $@"

실행 결과:

./example.sh apple banana cherry

출력:

스크립트 이름: ./example.sh
인자 개수: 3
모든 인자($*): apple banana cherry
모든 인자($@): apple banana cherry

✅ $*와 $@의 차이는 따옴표 처리에서 드러납니다.
"$*"는 모든 인자를 하나로 합친 문자열로 취급하지만,
"$@"는 각 인자를 개별 단어로 인식합니다.

 

$? — 마지막 명령의 결과 확인

Bash에서 $?는 이전 명령어의 실행 결과 상태코드(exit status) 를 나타냅니다.

ls /nonexistent
echo $?

출력:

ls: cannot access '/nonexistent': No such file or directory
2

0이면 성공, 0이 아니면 오류 발생을 의미합니다.
조건문이나 자동화 스크립트에서 자주 활용됩니다.

 

$$ — 현재 Shell의 PID

$$는 현재 실행 중인 Bash 프로세스의 프로세스 ID (PID) 를 반환합니다.

logfile="/tmp/mylog_$$.txt"

 

응용 예시 — Positional + Special Parameters 조합

 

아래 예시는 전달된 모든 인자를 하나씩 출력하는 간단한 스크립트입니다.

#!/bin/bash

while [ "$#" -gt 0 ]
do
    echo "argument $1"
    shift
done

코드 해석:

  • $#: 남은 인자의 개수
  • $1: 현재 첫 번째 인자
  • shift: 인자를 한 칸씩 왼쪽으로 이동

실행 예시:

./loop.sh one two three

출력 결과:

argument one
argument two
argument three

 

 

정리하면

 

Special Parameters는 Bash 스크립트의 흐름을 제어하고 디버깅을 돕는 강력한 도구입니다.
이 변수들을 이해하면 스크립트의 동작을 더 명확히 추적할 수 있고,
복잡한 자동화 로직에서도 안정적인 제어가 가능해집니다