1 #!/bin/bash
2 #
3 # Usage:
4 # ./named-ref.test.sh <function name>
5
6 #### pass array by reference
7 show_value() {
8 local -n array_name=$1
9 local idx=$2
10 echo "${array_name[$idx]}"
11 }
12 shadock=(ga bu zo meu)
13 show_value shadock 2
14 ## stdout: zo
15
16 #### pass assoc array by reference
17 show_value() {
18 local -n array_name=$1
19 local idx=$2
20 echo "${array_name[$idx]}"
21 }
22 days=([monday]=eggs [tuesday]=bread [sunday]=jam)
23 show_value days sunday
24 ## stdout: jam
25 ## BUG mksh stdout: [monday]=eggs
26 # mksh note: it coerces "days" to 0? Horrible.
27
28 #### pass local array by reference, relying on DYNAMIC SCOPING
29 show_value() {
30 local -n array_name=$1
31 local idx=$2
32 echo "${array_name[$idx]}"
33 }
34 caller() {
35 local shadock=(ga bu zo meu)
36 show_value shadock 2
37 }
38 caller
39 ## stdout: zo
40 # mksh appears not to have local arrays!
41 ## BUG mksh stdout-json: ""
42 ## BUG mksh status: 1
43