셀스크립트, 위치 매개변수

위치 매개 변수는 스크립트를 실행할 때, 넘겨주는 파라미터를 의미한다.

매개 변수는 아래와 같다.

$0, $1, $*, $@, $#

각각이 어떻게 동작하는지 아래 예제를 참고 바란다.

➜  ~ vi lang.sh
#!/bin/bash

echo "lang 1 : $0"
echo "lang 2,3 : $1, $2"
echo "lang * : $*"
echo "lang @ : $@"
echo "lang # : $#"

➜  ~ ./lang.sh java python rust
lang 1 : ./lang.sh
lang 2,3 : java, python
lang * : java python rust
lang @ : java python rust
lang # : 3

여기서 $*와 $@의 출력이 동일하다는 것을 볼 수 있다.

둘의 차이는 $*는 위 에서 매개변수로 사용한 세개의 언어를 하나의 문자열로 인식한다는 점이다. 아래와 같이 테스트를 진행하면 차이점을 명확히 알 수 있다.

➜  ~ vi lang2.sh
#!/bin/bash

for lang in "$@"
do
  echo "lang : $lang"
done

echo "--------"

for lang in "$*"
do
  echo "lang : $lang"
done
➜  ~ ./lang2.sh java "python rust"
lang : java
lang : python rust
--------
lang : java python rust
➜  ~

for를 사용할때 더블쿼터로 감싸지 않으면 둘다 매개변수가 더블쿼터로 감싸져 있더라도 각각출력하게 된다 예를들면 아래와 같이 출력된다.

➜  ~ ./lang2.sh java python rust
lang : java
lang : python
lang : rust
--------
lang : java
lang : python
lang : rust

하지만 “$*” 나 “$@“ 로 사용하게 되면 매개 변수를 인식하는 방식이 달라지게 된다. 이 부분을 명확히 알고 있어야 쉘스크립트 작성하는데에 시행착오를 겪지 않을 수 있다.