Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: how do I get the last argument from a list of arguments?



See the description of the *${name:offset} *syntax in *man zshexpn*. Note
the space between the colon and minus-sign is required to disambiguate it
from the "var:-default" syntax.

function lastarg() {
    print "${@[-1]}"
    print "${@: -1}"
}

lastarg 1 2 3


On Mon, Jul 7, 2014 at 2:06 PM, TJ Luoma <luomat@xxxxxxxxx> wrote:

> I’m trying to learn better ways of dealing with arguments given to a
> function, because I am sure that I am not doing it the most efficient
> way.
>
> For example, if I want to process a series of args, I usually use a
> loop like this:
>
> for FOO in "$@"
> do
>      case "$FOO" in
>           -t|--to)
>                shift
>                TO="$1"
>                shift
>           ;;
>
>           -v|--verbose)
>                VERBOSE='yes'
>           shift
>           ;;
>
>           -*|--*)
>                echo " $NAME [warning]: Don't know what to do with arg: $1"
>                shift
>           ;;
>
>      esac
>
> done # for args
>
> That has worked OK for what I've needed to do, but now I'm trying to
> create two functions which I will use in place of 'cp' and 'mv' and I
> need to be able to find the _last_ argument (the destination) before I
> process all the rest of the args.
>
> The only way that I can think of to get the last argument is to do
> something like this
>
>      LAST=`echo "$@" | awk '{print $NF}'`
>
> but that made me wonder if there wasn’t a better way.
>
> Note that this does not need to be 'portable' at all -- I will happily
> use any zsh-specific features which may exist, as long as it works in
> 5.0.2 (which is what comes with OS X).
>
> Thanks!
>
> TjL
>



-- 
Kurtis Rader
Caretaker of the exceptional canines Junior and Hank


Messages sorted by: Reverse Date, Date, Thread, Author