File tree 2 files changed +39
-8
lines changed
2 files changed +39
-8
lines changed Original file line number Diff line number Diff line change @@ -132,17 +132,24 @@ function _prompt_menu_add() {
132
132
# (and not in a good way).
133
133
# From http://stackoverflow.com/a/1617303/142339
134
134
function setdiff() {
135
- local debug oldifs A B C x
135
+ local debug skip a b
136
136
if [[ " $1 " == 1 ]]; then debug=1; shift ; fi
137
- # Convert args to arrays.
138
- A=($1 ); B=($2 ); C=()
139
- for x in " ${A[@]} " ; do
140
- [[ " ${B[*]} " =~ (^| )$x ($| ) ]] || C=(" ${C[@]} " " $x " )
137
+ if [[ " $1 " ]]; then
138
+ local setdiffA setdiffB setdiffC
139
+ setdiffA=($1 ); setdiffB=($2 )
140
+ fi
141
+ setdiffC=()
142
+ for a in " ${setdiffA[@]} " ; do
143
+ skip=
144
+ for b in " ${setdiffB[@]} " ; do
145
+ [[ " $a " == " $b " ]] && skip=1 && break
146
+ done
147
+ [[ " $skip " ]] || setdiffC=(" ${setdiffC[@]} " " $a " )
141
148
done
142
- [[ " $debug " ]] && for x in A B C ; do
143
- echo " $x ($( eval echo " \$ {#$x [*]}" ) ) $( eval echo " \$ {$x [*]}" ) " 1>&2
149
+ [[ " $debug " ]] && for a in setdiffA setdiffB setdiffC ; do
150
+ echo " $a ($( eval echo " \$ {#$a [*]}" ) ) $( eval echo " \$ {$a [*]}" ) " 1>&2
144
151
done
145
- echo " ${C [@]} "
152
+ [[ " $1 " ]] && echo " ${setdiffC [@]} "
146
153
}
147
154
148
155
# If this file was being sourced, exit now.
Original file line number Diff line number Diff line change @@ -22,3 +22,27 @@ desired=(a a-b); installed=(a-b a); assert "" my_test
22
22
desired=(a-b a); installed=(a-b a); assert " " my_test
23
23
desired=(a a-b); installed=(a a-b); assert " " my_test
24
24
desired=(a-b a); installed=(a a-b); assert " " my_test
25
+
26
+ unset setdiffA setdiffB setdiffC
27
+ setdiff " a b c" " " > /dev/null
28
+ assert " 0" echo " ${# setdiffC[@]} "
29
+
30
+ unset setdiffA setdiffB setdiffC; setdiffA=(a b c); setdiffB=(); setdiff
31
+ assert " 3" echo " ${# setdiffC[@]} "
32
+ assert " a b c" echo " ${setdiffC[*]} "
33
+
34
+ unset setdiffA setdiffB setdiffC; setdiffA=(a b c); setdiffB=(a); setdiff
35
+ assert " 2" echo " ${# setdiffC[@]} "
36
+ assert " b c" echo " ${setdiffC[*]} "
37
+
38
+ unset setdiffA setdiffB setdiffC; setdiffA=(a b c); setdiffB=(c a); setdiff
39
+ assert " 1" echo " ${# setdiffC[@]} "
40
+ assert " b" echo " ${setdiffC[*]} "
41
+
42
+ unset setdiffA setdiffB setdiffC; setdiffA=(" a b" c); setdiffB=(a b c); setdiff
43
+ assert " 1" echo " ${# setdiffC[@]} "
44
+ assert " a b" echo " ${setdiffC[*]} "
45
+
46
+ unset setdiffA setdiffB setdiffC; setdiffA=(a b " a b" c " c d" ); setdiffB=(a c); setdiff
47
+ assert " 3" echo " ${# setdiffC[@]} "
48
+ assert " b a b c d" echo " ${setdiffC[*]} "
You can’t perform that action at this time.
0 commit comments