$1Es el primer argumento.
$@es todos ellos
¿Cómo puedo encontrar el último argumento pasado a un script de shell?
${!#}. Pruébalo usando bash -c 'echo ${!#}' arg1 arg2 arg3. Para bash , ksh y zsh , la respuesta de Dennis Williamson propone ${@: -1}. Además ${*: -1}también se puede utilizar. Pruébalo usando zsh -c 'echo ${*: -1}' arg1 arg2 arg3. Pero eso no funciona para dash , csh y tcsh .
${!#}, a diferencia ${@: -1}, también funciona con la expansión de parámetros. Puedes probarlo con bash -c 'echo ${!#%.*}' arg1.out arg2.out arg3.out.