${#}
- количество аргументов в текущей оболочке / функции:
$ set -- a b c
$ echo ${#}
3
!
выполняет косвенное расширение параметра, поэтому в качестве имени параметра используется значение ${#}
. параметр для расширения.
$ echo ${!#} # same as echo ${3}
c
Короче говоря, ${!#}
расширяется до значения последнего аргумента.
В отсутствие таких расширений bash
можно просто напишите al oop наподобие
for result; do :; done # instead of result=${!#}
, который будет перебирать позиционные аргументы, устанавливая result
каждому по очереди, оставляя result
со значением последнего после завершения l oop .