1. 내장 변수(Builtin Variables)
내장(Builtin) 변수란 BASH 스크립트의 동작에 영향을 미치는 변수를 뜻하며, 다음과 같다.
변수 | 설명 |
---|---|
$BASH |
BASH 실행 파일의 경로로, 보통은 /bin/bash 임 |
$BASH_ENV |
스크립트가 실행될 때 어디에서 BASH 시작 파일을 읽을 것인지를 나타내는 환경 변수 |
$BASH_VERSINFO[n] |
원소 개수가 6 개인 배열로, 현재 설치된 BASH 버전에 대한 정보를 담고 있음 |
$BASH_VERSION |
시스템에 설치된 BASH 버전 |
$DIRSTACK |
디렉터리 스택의 내용으로 이 내장 변수는 dirs 명령어와 짝을 이룸 |
$EDITOR |
스크립트가 부르는 에디터로서, 보통은 vi 나 emacs 임 |
$EUID |
유효한 사용자 아이디 값 |
$FUNCNAME |
현재 함수의 이름으로, 함수 밖에서는 널 값을 가짐 |
$GLOBIGNORE |
globbing 시 포함되지 않을 파일명 패턴들의 목록 |
$GROUPS |
현재 사용자가 속해 있는 그룹으로 /etc/passwd 에 적혀 있는 현재 사용자의 그룹 아이디 값을 보여줌 |
$HOME |
사용자의 홈 디렉터리로, 보통은 /home/username 임 |
$HOSTNAME |
부팅 시 Init 스크립트에서 시스템 이름을 설정해 줌 |
$HOSTTYPE |
호스트 타입이며, $MACHTYPE 과 마찬가지로 시스템 하드웨어를 알려줌 |
$IFS |
입력 필드 구분자 |
$IGNOREEOF |
EOF 무시 |
$LC_COLLATE |
파일명 확장이나 패턴 매칭 시의 대조 순서를 제어함 |
$LC_CTYPE |
globbing과 패터너 매칭의 문자 해석을 제어함 |
$LINENO |
셸 스크립트에서 이 변수가 들어 있는 줄의 줄 번호를 나타냄 |
$MACHTYPE |
시스템 하드웨어를 알려줌 |
$OLDPWD |
바로 전 작업 디렉터리 |
$OSTYPE |
운영체제 종류 |
$PATH |
실행 파일의 경로로, 보통은 /usr/bin/ , /usr/local/bin 등이 있음 |
$PIPESTATUS |
마지막으로 실행된 파이프의 종료 상태 |
$PPID |
부모 프로세스 아이디 |
$PS1 |
명령어줄에서 볼 수 있는 메인 프롬프트 |
$PS2 |
2차 프롬프트로, 추가적인 입력이 필요할 때 > 로 표시됨 |
$PS3 |
3차 프롬프트로, select 루프문에서 표시됨 |
$PS4 |
4차 프롬프트로, 스크립트에 -x 옵션이 걸려서 실행될 때 스크립트의 매 줄마다 + 로 표시됨 |
$PWD |
현재 작업 디렉터리 |
$REPLY |
read 에 변수가 안 주어졌을 때 저장되는 기본값이고, select 메뉴에서는 변수의 값이 아니라 선택한 숫자가 저장됨 |
$SECONDS |
스크립트가 얼마나 돌았는지를 나타내는 초 단위 시간 |
$SHELLOPTS |
현재 켜져 있는 셸 옵션들의 목록으로서 읽기 전용 변수 |
$SHLVL |
셸 레벨로 BASH가 얼마나 깊이 중첩되어 있는지를 나타냄 |
$TMOUT |
0 이 아닌 값으로 설정해 놓으면 그 시간이 지난 다음에 로그아웃 됨 |
$UID |
사용자 아이디 값 |
위치 매개변수(Positional Parameters)는 다음과 같다.
변수 | 설명 |
---|---|
$0 , $1 , $2 , ..., ${10} |
위치 매개변수로서, 명령어줄에서 스크립트로 넘겨지거나 함수로 넘겨지거나 set 명령어로 강제로 설정됨 |
$# |
명령어줄 인자의 개수나 위치 매개변수들 |
$* |
한 낱말로 표시되는 모든 위치 매개변수들 |
$@ |
$* 과 같지만 각 매개변수는 쿼우트된 문자열로 취급되며, 해석되거나 확장없이 있는 그대로 넘겨짐 |
다른 특수 매개변수는 다음과 같다.
변수 | 설명 |
---|---|
$- |
스크립트로 넘겨진 플래그들 |
$! |
백라운드로 돌고 있는 가장 최근 작업의 PID |
$_ |
바로 이전에 실행된 명령어의 제일 마지막 인자로 설정되는 특수 변수 |
$? |
명령어나 함수, 스크립트 자신의 종료 상태 |
$$ |
스크립트 자신의 PID롤 보통 임시 파일 이름을 만들 때 사용 |
$*과 $@로 인자를 나열하기
#!/bin/bash
# 스크립트를 부를 때 "one two three"를 넣음
E_BADARGS=65
if [ ! -n "$1" ]; then
echo "사용법: $(basename $0) argument1 argument2 etc."
exit $E_BADARGS
fi
index=1
echo "\"\$*\"로 인자를 나열하기:"
# "$*"를 쿼우트하지 않으면 제대로 동작하지 않음
# $*는 모든 인자를 하나의 낱말로 봄
for arg in "$*"; do
echo "Arg #$index = $arg"
let "index += 1"
done
echo "전체 인자 목록은 하나의 낱말로 나타납니다."
# "$*"로 인자를 나열하기:
# Arg #1 = one two three
# 전체 인자 목록은 하나의 낱말로 나타납니다.
index=1
echo "\"\$@\"로 인자를 나열하기:"
# "$@"를 쿼우트하지 않으면 제대로 동작하지 않음
# $@는 인자들을 분리된 낱말로 봄
for arg in "$@"; do
echo "Arg #$index = $arg"
let "index += 1"
done
echo "전체 인자 목록은 분리된 낱말로 나타납니다."
# "$@"로 인자를 나열하기:
# Arg #1 = one
# Arg #2 = two
# Arg #3 = three
# 전체 인자 목록은 분리된 낱말로 나타납니다.
exit 0