Bash-4.3 distribution sources and documentation
[platform/upstream/bash.git] / examples / functions / sort-pos-params
1 #
2 #  Chet Ramey <chet.ramey@case.edu>
3 #
4 #  Copyright 2001 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 # Sort the positional paramters.
21 # Make sure the positional parameters are passed as arguments to the function.
22 # If -u is the first arg, remove duplicate array members.
23 sort_posparams()
24 {
25         local -a R
26         local u
27
28         case "$1" in
29         -u)     u=-u ; shift ;;
30         esac
31
32         # if you want the case of no positional parameters to return success,
33         # remove the error message and return 0
34         if [ $# -eq 0 ]; then
35                 echo "$FUNCNAME: argument expected" >&2
36                 return 1
37         fi
38
39         # make R a copy of the positional parameters
40         R=( "${@}" )
41
42         # sort R.
43         R=( $( printf "%s\n" "${R[@]}" | sort $u) )
44
45         printf "%s\n" "${R[@]}"
46         return 0
47 }
48
49 # will print everything on separate lines
50 set -- 3 1 4 1 5 9 2 6 5 3 2
51 sort_posparams "$@"
52
53 # sets without preserving quoted parameters
54 set -- $( sort_posparams "$@" )
55 echo "$@"
56 echo $#
57
58 # sets preserving quoted parameters, beware pos params with embedded newlines
59 set -- 'a b' 'a c' 'x z'
60
61 oifs=$IFS
62 IFS=$'\n'
63 set -- $( sort_posparams "$@" )
64 IFS="$oifs"
65
66 echo "$@"
67 echo $#
68
69 sort_posparams