본문 바로가기
리눅스 (Linux)

특수 변수

by 멸치김밥 2021. 12. 19.

쉘 스크립트에서 정해져있는 특수 변수가 있고

각 특수 변수들의 사용법과 의미는 다음과 같다

 

  • $0 : 현재 스크립트 파일 이름
-------------kimchi.sh 파일 안에서 작성----------
#!/bin/bash
echo "이 파일의 이름은 $0입니다."
-------------------------------------------------

$ ./kimchi.sh
이 파일의 이름은 ./kimchi.sh입니다.

파일명 앞에는 실행시킬 때 경로 입력한것에 따라 바뀐다.

현재 경로에 있다는 의미로 쓴 ./ 가 $0 에 같이 나오듯

a/b/c/kimchi.sh 라고 실행하면 $0 도 a/b/c/kimchi.sh 라고 나온다

출처 : https://jhnyang.tistory.com/153

  • $1 : 첫번째 아규먼트

$2는 두번째, $3는 세번째... 10번째부터는 ${10} 처럼 중괄호로 감싸줘야한다

-------------kimchi.sh 파일 안에서 작성----------
#!/bin/bash
echo '$1' $1
echo '$2' $2
echo '$3' $3
echo '$4' $4
-------------------------------------------------

$ ./kimchi.sh a b c
$1 a
$2 b
$3 c
$4

4번째 아규먼트는 넣지 않았으니 결과에서도 아무것도 나오지 않는다.

 

 

  • $# : 총 아규먼트 개수
-------------kimchi.sh 파일 안에서 작성----------
#!/bin/bash
echo $#
-------------------------------------------------

$ ./kimchi.sh a b c
3

위와 같이 입력하면 kimchi.sh 뒤에 3개의 아규먼트가 있으니 $# 의 결과가 3이 나온다.

 

 

  • $@ : 전체 아규먼트를 하나의 문자열로 반환
  • $* : 전체 아규먼트를 공백' '으로 구분해 반환
-------------kimchi.sh 파일 안에서 작성----------
#!/bin/bash

echo '$@' $@
echo '$*' $*
echo 
echo '이것은 $@'
for param in "$@"
do
	echo '-' $param
done
echo 
echo '이것은 $*'
for param in "$*"
do
	echo '-' $param
done
-------------------------------------------------
$@ a b c
$* a b c

이것은 $@
- a
- b
- c

이것은 $*
- a b c

둘다 a b c 로 출력된 결과물이 같게 보이는데

for문에 돌려보면 $@는 배열이 3개라 3번 반복되어 3줄이 출력되었고

$*은  'a b c' 통으로 하나의 문자열이라 한번만 출력되었다.

 

 

 

  • $? : 바로 전 명령의 실행 상태

$? 가 실행되기 바로 전의 실행한 명령이 올바르게 동작되고 종료되었다면 0이 출력되고

문제가 있으면 127이 표기 된다.

#!/bin/bash

VAR=1
echo '$?' $?

# 잘못된 변수선언
-VAR=1
echo '$?' $?
# 없는 파일을 실행
./kimchi2.sh
echo '$?' $?
------------------------------------------------------
$? 0
workspace/kimchi.sh: line 5: -VAR=1: command not found
$? 127
workspace/kimchi.sh: line 7: ./kimchi2.sh: No such file or directory
$? 127

 

 

  • $$ : 현재 스크립트의 PID
$ echo $$
12345
$ echo $$
12346
  • $! : 마지막으로 실행된 백그라운드 PID

 

'리눅스 (Linux)' 카테고리의 다른 글

리다이렉션  (0) 2021.12.19
명령어 치환 (Command Substitution)  (0) 2021.12.19
특수 권한  (0) 2021.12.19
리눅스 - shell script 변수  (0) 2021.12.16
리눅스 - Shell Script  (0) 2021.12.16

댓글