]> git.ipfire.org Git - thirdparty/bash.git/blame - examples/functions/sort-pos-params
bash-5.1 distribution sources and documentation
[thirdparty/bash.git] / examples / functions / sort-pos-params
CommitLineData
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.
23sort_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
50set -- 3 1 4 1 5 9 2 6 5 3 2
51sort_posparams "$@"
52
53# sets without preserving quoted parameters
54set -- $( sort_posparams "$@" )
55echo "$@"
56echo $#
57
58# sets preserving quoted parameters, beware pos params with embedded newlines
59set -- 'a b' 'a c' 'x z'
60
61oifs=$IFS
62IFS=$'\n'
63set -- $( sort_posparams "$@" )
64IFS="$oifs"
65
66echo "$@"
67echo $#
68
69sort_posparams