$1это первый аргумент.
$@это все из них.
Как я могу найти последний аргумент, переданный сценарию оболочки?
${!#}. Проверьте это с помощью bash -c 'echo ${!#}' arg1 arg2 arg3. Для Баш , KSH и Zsh , в ответ Деннис Уильямсона предлагает ${@: -1}. Кроме того, ${*: -1}также может быть использован. Проверьте это с помощью zsh -c 'echo ${*: -1}' arg1 arg2 arg3. Но это не работает для dash , csh и tcsh .
${!#}В отличие ${@: -1}, также работает с расширением параметра. Вы можете проверить это с bash -c 'echo ${!#%.*}' arg1.out arg2.out arg3.out.