$1
, $2
, $3
, ... 순으로 전달된 인자를 담고 있다.#!/bin/bash
function print() {
echo $1
echo $2
}
print "Hello World" "2022-07-09"
스크립트를 실행할 때, 사용한 실행 인자(argument)를 담고있는 매개변수다.
위치 매개변수의 종류는 다음과 같다.
매개변수 | 설명 |
---|---|
$0 | 실행한 스크립트 이름 |
$1 ~ | 실행인자가 순서대로 담겨진다. |
$* | 전체 실행인자 값 |
$@ | $* 와 차이가 없으나, 앞뒤로 " " (큰 따옴표)를 사용하면 차이가 발생한다. |
$# | 매개변수의 총 개수 |
${10}
로 표기해야 한다.#
은 통상적으로 많은 곳에서 number를 의미한다.다음은 위치 매개변수를 사용하는 예시 코드다.
#!/bin/bash
for var in $*
do
echo $var
done
echo "Shell Script name is $0"
echo "Count is $#"
echo "Second argument is $2"
"$*"
와 "$@"
"$*"
와 "$@"
는 차이가 있다." "
(큰 따옴표)로 둘러쌓인 문자열이 있다고 가정해보자.sh test.sh aaa bbb "ccc ddd" eee
ccc ddd
다.$*
와 $@
는 스페이스를 기준으로 문자열을 각 파라미터로 나누어 인식한다."$*"
는 문자열 전체를 하나의 파라미터로 인식한다."$@"
는 " "
(큰 따옴표)로 둘러쌓인 문자열을 하나의 파라미터로 인식한다.$*
와 $@
의 출력값#!/bin/bash
for var in $*
do
echo $var
done
#!/bin/bash
for var in $@
do
echo $var
done
sh test.sh aaa bbb "ccc ddd" eee
명령으로 실행시킨 결과는 다음으로 둘이 같다.aaa
bbb
ccc
ddd
eee
"$*"
#!/bin/bash
for var in "$*"
do
echo $var
done
sh test.sh aaa bbb "ccc ddd" eee
명령으로 실행시킨 결과는 다음과 같이 하나의 파라미터로 인식한다.aaa bbb ccc ddd eee
"$@"
#!/bin/bash
for var in "$@"
do
echo $var
done
sh test.sh aaa bbb "ccc ddd" eee
명령으로 실행시킨 결과는 다음과 같이 ccc ddd를 하나의 파라미터로 인식하는 것을 알 수 있다.aaa
bbb
ccc ddd
eee
shift
가 있다.shift
명령어를 사용하면 매개변수의 값들이 앞으로 하나씩 당겨진다.$2
매개변수에 들어있던 실행인자가 $1
매개변수로 옮겨지고, $3
매개변수에 들어있던 실행인자가 $2
매개변수로 옮겨지는 식이다.shift
명령어를 사용하는 예시 코드다.#!/bin/sh
echo "Second Argument is $2"
shift
echo "Now, Second Arguement is $1"
현재 실행중인 명령어의 PID나 바로 전에 실행했던 명령어, 함수 또는 스크립트의 실행이 정상적으로 이루어졌는지를 확인할 수 있는 특별한 변수들이다.
특수 매개변수의 종류는 다음과 같다.
매개변수 | 설명 |
---|---|
$$ | 현재 명령어 또는 스크립트의 PID |
$? | 최근에 실행된 명령어, 함수, 스크립트의 종료 상태 |
$! | 최근에 실행한 백그라운드 명령의 PID |
$- | 현재 옵션 Flag |
echo $$
를 해보면, 배시 셸의 PID가 출력된다.cat test.txt
를 수행하고 echo $?
를 해보자.cat test.txt
를 수행한 후 echo $?
를 해보자.