"$@"
является особенным в том смысле, что оно, хотя и является выражением в одной кавычке, расширяется до нуля или более «слов».Вы не можете выполнить то же самое с обычным параметром, но (используя немного другой синтаксис) это можно сделать с помощью переменной / параметра массива (например, в bash , ksh , зш ):
array_var=("$@")
for x in "${array_var[@]}"; do printf '<<%s>>\n' "$x"; done