source: vendor/bash/3.1-p17/examples/functions/array-stuff

Last change on this file was 3228, checked in by bird, 18 years ago

bash 3.1

File size: 1.7 KB
Line 
1# usage: reverse arrayname
2reverse()
3{
4 local -a R
5 local -i i
6 local rlen temp
7
8 # make r a copy of the array whose name is passed as an arg
9 eval R=\( \"\$\{$1\[@\]\}\" \)
10
11 # reverse R
12 rlen=${#R[@]}
13
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
20
21 # and assign R back to array whose name is passed as an arg
22 eval $1=\( \"\$\{R\[@\]\}\" \)
23}
24
25A=(1 2 3 4 5 6 7)
26echo "${A[@]}"
27reverse A
28echo "${A[@]}"
29reverse A
30echo "${A[@]}"
31
32# unset last element of A
33alen=${#A[@]}
34unset A[$alen-1]
35echo "${A[@]}"
36
37# ashift -- like shift, but for arrays
38
39ashift()
40{
41 local -a R
42 local n
43
44 case $# in
45 1) n=1 ;;
46 2) n=$2 ;;
47 *) echo "$FUNCNAME: usage: $FUNCNAME array [count]" >&2
48 exit 2;;
49 esac
50
51 # make r a copy of the array whose name is passed as an arg
52 eval R=\( \"\$\{$1\[@\]\}\" \)
53
54 # shift R
55 R=( "${R[@]:$n}" )
56
57 # and assign R back to array whose name is passed as an arg
58 eval $1=\( \"\$\{R\[@\]\}\" \)
59}
60
61ashift A 2
62echo "${A[@]}"
63
64ashift A
65echo "${A[@]}"
66
67ashift A 7
68echo "${A[@]}"
69
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.
72array_sort()
73{
74 local -a R
75 local u
76
77 case "$1" in
78 -u) u=-u ; shift ;;
79 esac
80
81 if [ $# -eq 0 ]; then
82 echo "array_sort: argument expected" >&2
83 return 1
84 fi
85
86 # make r a copy of the array whose name is passed as an arg
87 eval R=\( \"\$\{$1\[@\]\}\" \)
88
89 # sort R
90 R=( $( printf "%s\n" "${A[@]}" | sort $u) )
91
92 # and assign R back to array whose name is passed as an arg
93 eval $1=\( \"\$\{R\[@\]\}\" \)
94 return 0
95}
96
97A=(3 1 4 1 5 9 2 6 5 3 2)
98array_sort A
99echo "${A[@]}"
100
101A=(3 1 4 1 5 9 2 6 5 3 2)
102array_sort -u A
103echo "${A[@]}"
Note: See TracBrowser for help on using the repository browser.