1 |
#!/usr/bin/env bash |
2 |
|
3 |
# NOTE: |
4 |
# -declare -A is required. |
5 |
# |
6 |
# Simply doing: |
7 |
# a=([aa]=b [foo]=bar ['a+1']=c) |
8 |
# gets utterly bizarre behavior. |
9 |
# |
10 |
# Associtative Arrays are COMPLETELY bash-specific. mksh doesn't even come |
11 |
# close. So I will probably not implement them, or implement something |
12 |
# slightly different, because the semantics are just wierd. |
13 |
|
14 |
# http://www.gnu.org/software/bash/manual/html_node/Arrays.html |
15 |
# TODO: Need a SETUP section. |
16 |
|
17 |
#### TODO: SETUP should be share |
18 |
declare -A a |
19 |
a=([aa]=b [foo]=bar ['a+1']=c) |
20 |
|
21 |
#### create empty assoc array, put, then get |
22 |
declare -A d # still undefined |
23 |
d['foo']=bar |
24 |
echo ${d['foo']} |
25 |
## stdout: bar |
26 |
|
27 |
#### retrieve indices with ! |
28 |
declare -A a |
29 |
a=([aa]=b [foo]=bar ['a+1']=c) |
30 |
argv.py "${!a[@]}" |
31 |
# Is this invalid on associative arrays? Makes no sense. |
32 |
## stdout: ['foo', 'aa', 'a+1'] |
33 |
|
34 |
#### $a gives nothing |
35 |
declare -A a |
36 |
a=([aa]=b [foo]=bar ['a+1']=c) |
37 |
echo "${a}" |
38 |
## stdout-json: "\n" |
39 |
|
40 |
#### length of dict does not work |
41 |
declare -A a |
42 |
a=([aa]=b [foo]=bar ['a+1']=c) |
43 |
echo "${#a}" |
44 |
## stdout: 0 |
45 |
|
46 |
#### index by number doesn't work |
47 |
declare -A a |
48 |
a=([aa]=b [foo]=bar ['a+1']=c) |
49 |
echo 0 "${a[0]}" 1 "${a[1]}" 2 "${a[2]}" |
50 |
## stdout-json: "0 1 2 \n" |
51 |
|
52 |
#### index by key name |
53 |
declare -A a |
54 |
a=([aa]=b [foo]=bar ['a+1']=c) |
55 |
echo "${a[aa]}" "${a[foo]}" "${a['a+1']}" |
56 |
# WTF: Why do we get bar bar c? |
57 |
## stdout-json: "b bar c\n" |
58 |
|
59 |
#### index by quoted string |
60 |
declare -A a |
61 |
a=([aa]=b [foo]=bar ['a+1']=c) |
62 |
echo "${a['a+1']}" |
63 |
## stdout: c |
64 |
|
65 |
#### index by unquoted string |
66 |
declare -A a |
67 |
a=([aa]=b [foo]=bar ['a+1']=c) |
68 |
echo "${a[a+1]}" |
69 |
## stdout: c |
70 |
|
71 |
#### index by unquoted string as arithmetic |
72 |
# For assoc arrays, unquoted string is just raw. |
73 |
# For regular arrays, unquoted string is an arithmetic expression! |
74 |
# How do I parse this? |
75 |
declare -A assoc |
76 |
assoc=([a+1]=c) |
77 |
array=(5 6 7) |
78 |
a=1 |
79 |
echo "${assoc[a]}" |
80 |
echo "${assoc[a+1]}" # This works |
81 |
echo "${array[a+1]}" |
82 |
## stdout-json: "\nc\n7\n" |
83 |
|
84 |
#### WTF index by key name |
85 |
declare -A a |
86 |
a=([xx]=bb [cc]=dd) |
87 |
echo "${a[xx]}" "${a[cc]}" |
88 |
## stdout-json: "bb dd\n" |
89 |
|
90 |
#### Array stored in associative array gets converted to string |
91 |
array=('1 2' 3) |
92 |
declare -A d |
93 |
d[a]="${array[@]}" |
94 |
argv.py "${d[a]}" |
95 |
## stdout: ['1 2 3'] |
96 |
|
97 |
#### Can't initialize assoc array with indexed array |
98 |
declare -A A=(1 2 3) |
99 |
## status: 1 |
100 |
## BUG bash status: 0 |
101 |
|
102 |
#### Initializing indexed array with with assoc array drops the constants |
103 |
declare -a a=([xx]=1 [yy]=2 [zz]=3) |
104 |
#declare -a a=(1 2 3) |
105 |
echo "${a[@]}" |
106 |
#echo "${!a[@]}" |
107 |
## N-I mksh stdout-json: "" |
108 |
## BUG bash stdout-json: "3\n" |
109 |
|
110 |
#### Append to associative array value |
111 |
declare -A a |
112 |
a['x']+='foo' |
113 |
a['x']+='bar' |
114 |
argv.py "${a["x"]}" |
115 |
## STDOUT: |
116 |
['foobar'] |
117 |
## END |
118 |
|