mirror of https://github.com/tLDP/LDP
79 lines
2.2 KiB
Bash
79 lines
2.2 KiB
Bash
#!/bin/bash
|
|
# array-function.sh: Passing an array to a function and ...
|
|
# "returning" an array from a function
|
|
|
|
|
|
Pass_Array ()
|
|
{
|
|
local passed_array # Local variable!
|
|
passed_array=( `echo "$1"` )
|
|
echo "${passed_array[@]}"
|
|
# List all the elements of the new array
|
|
#+ declared and set within the function.
|
|
}
|
|
|
|
|
|
original_array=( element1 element2 element3 element4 element5 )
|
|
|
|
echo
|
|
echo "original_array = ${original_array[@]}"
|
|
# List all elements of original array.
|
|
|
|
|
|
# This is the trick that permits passing an array to a function.
|
|
# **********************************
|
|
argument=`echo ${original_array[@]}`
|
|
# **********************************
|
|
# Pack a variable
|
|
#+ with all the space-separated elements of the original array.
|
|
#
|
|
# Attempting to just pass the array itself will not work.
|
|
|
|
|
|
# This is the trick that allows grabbing an array as a "return value".
|
|
# *****************************************
|
|
returned_array=( `Pass_Array "$argument"` )
|
|
# *****************************************
|
|
# Assign 'echoed' output of function to array variable.
|
|
|
|
echo "returned_array = ${returned_array[@]}"
|
|
|
|
echo "============================================================="
|
|
|
|
# Now, try it again,
|
|
#+ attempting to access (list) the array from outside the function.
|
|
Pass_Array "$argument"
|
|
|
|
# The function itself lists the array, but ...
|
|
#+ accessing the array from outside the function is forbidden.
|
|
echo "Passed array (within function) = ${passed_array[@]}"
|
|
# NULL VALUE since the array is a variable local to the function.
|
|
|
|
echo
|
|
|
|
############################################
|
|
|
|
# And here is an even more explicit example:
|
|
|
|
ret_array ()
|
|
{
|
|
for element in {11..20}
|
|
do
|
|
echo "$element " # Echo individual elements
|
|
done #+ of what will be assembled into an array.
|
|
}
|
|
|
|
arr=( $(ret_array) ) # Assemble into array.
|
|
|
|
echo "Capturing array \"arr\" from function ret_array () ..."
|
|
echo "Third element of array \"arr\" is ${arr[2]}." # 13 (zero-indexed)
|
|
echo -n "Entire array is: "
|
|
echo ${arr[@]} # 11 12 13 14 15 16 17 18 19 20
|
|
|
|
echo
|
|
|
|
exit 0
|
|
|
|
# Nathan Coulter points out that passing arrays with elements containing
|
|
#+ whitespace breaks this example.
|