Bash-4.3 distribution sources and documentation
[platform/upstream/bash.git] / examples / functions / seq2
1 #
2 #  Chet Ramey <chet.ramey@case.edu>
3 #
4 #  Copyright 1998 Chester Ramey
5 #
6 #   This program is free software; you can redistribute it and/or modify
7 #   it under the terms of the GNU General Public License as published by
8 #   the Free Software Foundation; either version 2, or (at your option)
9 #   any later version.
10 #
11 #   TThis program is distributed in the hope that it will be useful,
12 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #   GNU General Public License for more details.
15 #
16 #   You should have received a copy of the GNU General Public License
17 #   along with this program; if not, write to the Free Software Foundation,
18 #   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
20 # Generate a sequence from m to n, m defaults to 1.
21
22 seq ()
23 {
24         declare -i lo hi i      # makes local
25         local _SEQ INIT COMPARE STEP
26
27         case "$1" in
28         -r)     INIT='i=$hi _SEQ=""' COMPARE='let "i >= $lo"' STEP='let i-=1' ; shift ;;
29         *)      INIT='i=$lo _SEQ=""' COMPARE='let "i <= $hi"' STEP='let i+=1' ;;
30         esac
31
32         case $# in
33         1) lo=1 hi="$1" ;;
34         2) lo=$1 hi=$2 ;;
35         *) echo seq: usage: seq [-r] [low] high 1>&2 ; return 2 ;;
36         esac
37
38         # equivalent to the as-yet-unimplemented
39         # for (( "$INIT" ; "$COMPARE" ; "$STEP" )); do _SEQ="${_SEQ}$i "; done
40         eval "$INIT"
41         while eval "$COMPARE"; do
42                 _SEQ="${_SEQ}$i "
43                 eval "$STEP"
44         done
45         echo "${_SEQ# }"
46         return 0
47 }
48
49 # like the APL `iota' function (or at least how I remember it :-)
50 iota()
51 {
52         case $# in
53         1) seq 1 "$1"; return $?;;
54         *) echo "iota: usage: iota high" 1>&2; return 2;;
55         esac
56 }