С здесь :
$ @ ведет себя как $ * за исключением того, что в кавычках аргументы разбиваются правильно, если в них есть пробелы.
Возьмем, к примеру, этот скрипт (взято из связанного ответа):
for var in "$@"
do
echo "$var"
done
Даёт это:
$ sh test.sh 1 2 '3 4'
1
2
3 4
Теперь измените "$@"
на $*
:
for var in $*
do
echo "$var"
done
И вы получите это:
$ sh test.sh 1 2 '3 4'
1
2
3
4
(Ответ найден с помощью Google )