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


Groups > gnu.bash.bug > #14664 > unrolled thread

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

Started byL A Walsh <bash@tlinx.org>
First post2018-09-25 17:17 -0700
Last post2018-09-25 17:17 -0700
Articles 1 — 1 participant

Back to article view | Back to gnu.bash.bug


Contents

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

#14664 — comment on RFE: 'shift'' [N] ARRAYNAME

FromL A Walsh <bash@tlinx.org>
Date2018-09-25 17:17 -0700
Subjectcomment on RFE: 'shift'' [N] ARRAYNAME
Message-ID<mailman.1328.1537921058.1284.bug-bash@gnu.org>
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

[toc] | [standalone]


Back to top | Article view | gnu.bash.bug


csiph-web