Line | |
---|
1 | # usage: reverse arrayname
|
---|
2 | reverse()
|
---|
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 |
|
---|
25 | A=(1 2 3 4 5 6 7)
|
---|
26 | echo "${A[@]}"
|
---|
27 | reverse A
|
---|
28 | echo "${A[@]}"
|
---|
29 | reverse A
|
---|
30 | echo "${A[@]}"
|
---|
31 |
|
---|
32 | # unset last element of A
|
---|
33 | alen=${#A[@]}
|
---|
34 | unset A[$alen-1]
|
---|
35 | echo "${A[@]}"
|
---|
36 |
|
---|
37 | # ashift -- like shift, but for arrays
|
---|
38 |
|
---|
39 | ashift()
|
---|
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 |
|
---|
61 | ashift A 2
|
---|
62 | echo "${A[@]}"
|
---|
63 |
|
---|
64 | ashift A
|
---|
65 | echo "${A[@]}"
|
---|
66 |
|
---|
67 | ashift A 7
|
---|
68 | echo "${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.
|
---|
72 | array_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 |
|
---|
97 | A=(3 1 4 1 5 9 2 6 5 3 2)
|
---|
98 | array_sort A
|
---|
99 | echo "${A[@]}"
|
---|
100 |
|
---|
101 | A=(3 1 4 1 5 9 2 6 5 3 2)
|
---|
102 | array_sort -u A
|
---|
103 | echo "${A[@]}"
|
---|
Note:
See
TracBrowser
for help on using the repository browser.