Patch-ID: bash41-003
[bash.git] / examples / functions / array-stuff
blob97ed5123d7fc690d29e3da15bb419c55b19287ca
1 # usage: reverse arrayname
2 reverse()
4         local -a R
5         local -i i
6         local rlen temp
8         # make r a copy of the array whose name is passed as an arg
9         eval R=\( \"\$\{$1\[@\]\}\" \)
11         # reverse R
12         rlen=${#R[@]}
14         for ((i=0; i < rlen/2; i++ ))
15         do
16                 temp=${R[i]}
17                 R[i]=${R[rlen-i-1]}
18                 R[rlen-i-1]=$temp
19         done
21         # and assign R back to array whose name is passed as an arg
22         eval $1=\( \"\$\{R\[@\]\}\" \)
25 A=(1 2 3 4 5 6 7)
26 echo "${A[@]}"
27 reverse A
28 echo "${A[@]}"
29 reverse A
30 echo "${A[@]}"
32 # unset last element of A
33 alen=${#A[@]}
34 unset A[$alen-1]
35 echo "${A[@]}"
37 # ashift -- like shift, but for arrays
39 ashift()
41         local -a R
42         local n
44         case $# in
45         1)      n=1 ;;
46         2)      n=$2 ;;
47         *)      echo "$FUNCNAME: usage: $FUNCNAME array [count]" >&2
48                 exit 2;;
49         esac
51         # make r a copy of the array whose name is passed as an arg
52         eval R=\( \"\$\{$1\[@\]\}\" \)
54         # shift R
55         R=( "${R[@]:$n}" )
57         # and assign R back to array whose name is passed as an arg
58         eval $1=\( \"\$\{R\[@\]\}\" \)
61 ashift A 2
62 echo "${A[@]}"
64 ashift A
65 echo "${A[@]}"
67 ashift A 7
68 echo "${A[@]}"
70 # Sort the members of the array whose name is passed as the first non-option
71 # arg.  If -u is the first arg, remove duplicate array members.
72 array_sort()
74         local -a R
75         local u
77         case "$1" in
78         -u)     u=-u ; shift ;;
79         esac
81         if [ $# -eq 0 ]; then
82                 echo "array_sort: argument expected" >&2
83                 return 1
84         fi
86         # make r a copy of the array whose name is passed as an arg
87         eval R=\( \"\$\{$1\[@\]\}\" \)
89         # sort R
90         R=( $( printf "%s\n" "${A[@]}" | sort $u) )
92         # and assign R back to array whose name is passed as an arg
93         eval $1=\( \"\$\{R\[@\]\}\" \)
94         return 0
97 A=(3 1 4 1 5 9 2 6 5 3 2)
98 array_sort A
99 echo "${A[@]}"
101 A=(3 1 4 1 5 9 2 6 5 3 2)
102 array_sort -u A
103 echo "${A[@]}"