mirror of https://github.com/tLDP/LDP
68 lines
1.8 KiB
Bash
68 lines
1.8 KiB
Bash
#!/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.
|