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 스크립트의 흐름을 제어하고 디버깅을 돕는 강력한 도구입니다.
이 변수들을 이해하면 스크립트의 동작을 더 명확히 추적할 수 있고,
복잡한 자동화 로직에서도 안정적인 제어가 가능해집니다
'개발 환경 및 프로젝트 관리 > Linux 개념' 카테고리의 다른 글
| Bash — Associative Array (연관 배열) (0) | 2025.10.09 |
|---|---|
| Bash — Indexed Array 기본 정리 (0) | 2025.10.09 |
| Bash에서의 Positional Parameters (위치 매개변수) (0) | 2025.10.09 |
| Bash 환경 변수(Environment Variable) 정리 (0) | 2025.10.09 |
| Bash에서의 함수 선언과 사용 (0) | 2025.10.09 |