]>
Commit | Line | Data |
---|---|---|
ac50fbac CR |
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 | ||
8868edaf | 20 | # Sort the positional parameters. |
28ef6c31 JA |
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 |