diff --git a/LDP/guide/docbook/abs-guide/embedded-arrays.sh b/LDP/guide/docbook/abs-guide/embedded-arrays.sh new file mode 100644 index 00000000..670d7a58 --- /dev/null +++ b/LDP/guide/docbook/abs-guide/embedded-arrays.sh @@ -0,0 +1,67 @@ +#!/bin/bash +# embedded-arrays.sh +# Embedded arrays and indirect references. + +# This script by Dennis Leeuw. +# Used with permission. +# Modified by document author. + + +ARRAY1=( + VAR1_1=value11 + VAR1_2=value12 + VAR1_3=value13 +) + +ARRAY2=( + VARIABLE="test" + STRING="VAR1=value1 VAR2=value2 VAR3=value3" + ARRAY21=${ARRAY1[*]} +) # Embed ARRAY1 within this second array. + +function print () { + OLD_IFS="$IFS" + IFS=$'\n' # To print each array element + #+ on a separate line. + TEST1="ARRAY2[*]" + local ${!TEST1} # See what happens if you delete this line. + # Indirect reference. + # This makes the components of $TEST1 + #+ accessible to this function. + + + # Let's see what we've got so far. + echo + echo "\$TEST1 = $TEST1" # Just the name of the variable. + echo; echo + echo "{\$TEST1} = ${!TEST1}" # Contents of the variable. + # That's what an indirect + #+ reference does. + echo + echo "-------------------------------------------"; echo + echo + + + # Print variable + echo "Variable VARIABLE: $VARIABLE" + + # Print a string element + IFS="$OLD_IFS" + TEST2="STRING[*]" + local ${!TEST2} # Indirect reference (as above). + echo "String element VAR2: $VAR2 from STRING" + + # Print an array element + TEST2="ARRAY21[*]" + local ${!TEST2} # Indirect reference (as above). + echo "Array element VAR1_1: $VAR1_1 from ARRAY21" +} + +print +echo + +exit 0 + +# As the author of the script notes, +#+ "you can easily expand it to create named-hashes in bash." +# (Difficult) exercise for the reader: implement this.