Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #14664

comment on RFE: 'shift'' [N] ARRAYNAME

From L A Walsh <bash@tlinx.org>
Newsgroups gnu.bash.bug
Subject comment on RFE: 'shift'' [N] ARRAYNAME
Date 2018-09-25 17:17 -0700
Message-ID <mailman.1328.1537921058.1284.bug-bash@gnu.org> (permalink)

Show all headers | View raw


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

Back to gnu.bash.bug | Previous | Next | Find similar | Unroll thread


Thread

comment on RFE: 'shift'' [N] ARRAYNAME L A Walsh <bash@tlinx.org> - 2018-09-25 17:17 -0700

csiph-web