On Sun, Aug 14, 2011 at 04:55, Linda Walsh <bash@tlinx.org> wrote:
` Michael Witten wrote:
On Sat, Aug 13, 2011 at 23:41, Linda Walsh <bash@tlinx.org> wrote:
${#${!name}[*]}
bash: ${#${!name}[*]}: bad substitution
It's probably what you're trying to avoid, but you'll probably have to
construct and then eval the right code by hand:
$(eval "echo \${#$name[*]}")
bingo. (sigh)
I refactored and am essentially using spaces to store the values in
a string, then when I want to check the, I throw them into an array and
manip.
e.g. (not showing all supporting code)
declare -axr _plst_t='_plist_'
declare -axl defined_PLists=()
add things to the list...
plist="$_plst_t$plist"
local -al plist_deps=( $plist )
{search for value in list, ...]
unless ((found)) ; then
plist_deps[${#plist_deps[*]}]="$subdep"
eval "$plist=( "$plist_deps[@]" )"
fi
You want this:
unless ((found)) ; then
plist_deps+=("$subdep")
eval $plist='("${plist_deps[@]}")'
fi
Of course, isn't the variable `plist' supposed to be a reference to
your *string* variable that holds a space-separated list of items? In
that case, the last line should be:
IFS=' ' eval $plist='"${a[*]}"'