$*
와$@
는 큰 차이가 있습니다.
$*
: 모든 매개변수를 하나의 문자열로 가짐.
$@
: 모든 매개변수를 필드로 구분된 단어들로 가짐.
이 차이는 아래의 스크립트를 통해 실행시켜 보면 차이를 알 수 있습니다.
$ cat test1
#!/bin/bash
for word in "$*"
do
echo " \$* : $word"
done
for word in "$@"
do
echo " \$@ : $word"
done
$ ./test1 A B C D E
$* : A B C D E
$@ : A
$@ : B
$@ : C
$@ : D
$@ : E
코드 리뷰
$*
와$@
는 큰따옴표가 씌워져 있습니다.
큰따옴표 없이 수행하면 어떻게 될까요?
$ cat test1
#!/bin/bash
for word in $*
do
echo " \$* : $word"
done
for word in $@
do
echo " \$@ : $word"
done
$ ./test1 A B C D E
$* : A
$* : B
$* : C
$* : D
$* : E
$@ : A
$@ : B
$@ : C
$@ : D
$@ : E
모든 매개변수를 구분해서 출력하는 것을 확인할 수 있습니다.