Here is a simple script to demonstrates the differentdifference between $* and $@:
#!/bin/bash test_param() { echo "Receive $# parameters" echo Using '$*' echo for param in $*; do printf '==>%s<==\n' "$param" done; echo echo Using '"$*"' for param in "$*"; do printf '==>%s<==\n' "$param" done; echo echo Using '$@' for param in $@; do printf '==>%s<==\n' "$param" done; echo echo Using '"$@"'; for param in "$@"; do printf '==>%s<==\n' "$param" done } IFS="^${IFS}" test_param 1 2 3 "a b c" Output:
% cuonglm at ~ % bash test.sh Receive 4 parameters Using $* ==>1<== ==>2<== ==>3<== ==>a<== ==>b<== ==>c<== Using "$*" ==>1^2^3^a b c<== Using $@ ==>1<== ==>2<== ==>3<== ==>a<== ==>b<== ==>c<== Using "$@" ==>1<== ==>2<== ==>3<== ==>a b c<== In array syntax, thethere is no differentdifference when using $* or $@. It only make sense when you use them with double quotes "$*" and "$@".