Voglio ottenere l'ultimo elemento di $*
. Il migliore che ho trovato finora è:zsh: accesso all'ultima riga di comando argomento assegnato a uno script
last=`eval "echo \\\$$#"`
Ma sembra eccessivamente opaco.
Voglio ottenere l'ultimo elemento di $*
. Il migliore che ho trovato finora è:zsh: accesso all'ultima riga di comando argomento assegnato a uno script
last=`eval "echo \\\$$#"`
Ma sembra eccessivamente opaco.
In zsh, è possibile utilizzare la P
parameter expansion flag o trattare @
come un array contenente i parametri posizionali:
last=${(P)#}
last=${@[$#]}
un modo che funziona in tutte le shell stile Bourne tra cui zsh è
eval last=\$$#
(Eri sulla strada giusta, ma eseguire echo
solo per ottenere l'output è inutile.)
last=${@[-1]}
dovrebbe fare il trucco. Più in generale,
${@[n]}
produrrà i * n * esimo parametro, mentre
${@[-n]}
produrrà i * n * esimo all'ultimo parametro.
L'espansione di parametro del colon non è in POSIX, ma questo funziona in almeno zsh, bash e ksh:
${@:$#}
Quando non ci sono argomenti, ${@:$#}
viene trattata come $0
in zsh e ksh, ma come vuoto in bash:
$ zsh -c 'echo ${@:$#}'
zsh
$ ksh -c 'echo ${@:$#}'
ksh
$ bash -c 'echo ${@:$#}'
$