[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: comment on RFE: 'shift'' [N] ARRAYNAME
From: |
Dennis Williamson |
Subject: |
Re: comment on RFE: 'shift'' [N] ARRAYNAME |
Date: |
Thu, 27 Sep 2018 07:42:20 -0500 |
On Tue, Sep 25, 2018, 7:17 PM L A Walsh <bash@tlinx.org> wrote:
> It struck me as it might be convenient if 'shift' could take an optional
> arrayname as an argument. Would that be possible or would it cause some
> incompatibility?
>
> i.e.
>
> > set one two three four five
> > dcl -a ARGV=("$@")
> > shift ARGV
> > echo "${ARGV[@]}"
> two three four five
> > shift 2 ARGV
> four five
>
> I know it can be done with a function, but with more mess.
> I used (maybe there's a better way, but...):
>
> (in my lib file ArFuncs.shh, that I can include)
>
> [include stdalias]
> #[include Types] #if type-checking include Types+line below
> lshift () {
> (($#)) || return 1
> int nshift=1
> if [[ $1 =~ ^[0-9]+$ ]]; then nshift=$1; shift;fi
> #if ! isArr $1; then echo >&2 "Need arrayname"; return 1; fi
> my ar=$1; shift
> my h="$ar[@]"
> set "${!h}"
> shift $nshift
> eval "${ar}=("$@")"
> }; export -f lshift
>
>
>
> "my" - What is this, Perl?
array_shift=2
arr=("${arr[@]:$array_shift}")
Done.
>