При первом вызове вашего скрипта
$ bash my.sh *
глобализация имени файла выполняется оболочкой перед вызовом скрипта.
При втором вызове вашего сценария
$ bash my.sh "*"
поиск имени файла выполняется в сценарии при выполнении echo $@
.
Чтобы избежать этого, поставьте двойную кавычку $@
в этой строке:
echo "$@"
Дополнительное чтение: Последствия для безопасности, если забыть заключить переменную в кавычки в оболочках bash/POSIX