On Wed, Feb 25, 2015 at 07:40:07PM -0500, Milo H. Fields wrote: > echo " parens: ${!#}"
> bash 4.1.17: > > $ sh jnk arg1 arg2 > > plain: !# > > parents: arg2 Can't say I've ever seen this syntax before. It looks like you are trying to get the last argument. The syntax I've seen for getting the last argument in bash is ${@:(-1)} (which has the advantage of being generalizable to a larger set of uses -- see "Tangent" below). imadev:~$ x() { echo "${@:(-1)}"; }; x foo 'last arg' last arg However, your syntax also does seem to work for me: imadev:~$ y() { echo "${!#}"; }; y foo 'last arg' last arg imadev:~$ echo $BASH_VERSION 4.3.30(5)-release Tangent: getting an arbitrary subset of arguments involves treating @ as an array and using the "range" notation, of which @:(-1) is just a single case. imadev:~$ z() { echo "First three args:" "${@:1:3}"; }; z a b c d e f g First three args: a b c imadev:~$ q() { echo "Last three args:" "${@:(-3)}"; }; q a b c d e f g Last three args: e f g