On Sun, Aug 14, 2011 at 04:55, Linda Walsh <b...@tlinx.org> wrote: > > > > ` Michael Witten wrote: >> >> On Sat, Aug 13, 2011 at 23:41, Linda Walsh <b...@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[*]}"'