Quiero obtener el último elemento de $*
. Lo mejor que he encontrado hasta ahora es:zsh: acceder al último argumento de línea de comando dado a un script
last=`eval "echo \\\$$#"`
Pero eso parece demasiado opaco.
Quiero obtener el último elemento de $*
. Lo mejor que he encontrado hasta ahora es:zsh: acceder al último argumento de línea de comando dado a un script
last=`eval "echo \\\$$#"`
Pero eso parece demasiado opaco.
En zsh, puede utilizar el P
parameter expansion flag o tratar @
como una matriz que contiene los parámetros posicionales:
last=${(P)#}
last=${@[$#]}
una manera que funcione en todos los del estilo Bourne incluyendo zsh es
eval last=\$$#
(Estaba en el camino correcto, pero ejecutar echo
solo para obtener su resultado no tiene sentido.)
last=${@[-1]}
debería hacer el truco. Más en general,
${@[n]}
se obtendrán los * n * º parámetro, mientras que
${@[-n]}
se obtendrán los * n * º al último parámetro.
La expansión parámetro de colon no está en POSIX, pero esto funciona en al menos zsh, golpe, y ksh:
${@:$#}
Cuando no hay argumentos, ${@:$#}
se trata como $0
en zsh y ksh pero como vacío en bash:
$ zsh -c 'echo ${@:$#}'
zsh
$ ksh -c 'echo ${@:$#}'
ksh
$ bash -c 'echo ${@:$#}'
$