On 5/6/11 11:02 AM, Steven W. Orr wrote:
>  4.0.35(1)-release (x86_64-redhat-linux-gnu)
> 
> I have a bunch of arrays, and some of the arrays' values are null or might
> contain spaces.
> 
> I wanted to write a routine to print out an array. It just takes the name
> of the array as an argument. Because some of the values of the array are
> null, when they print out, they show as two spaces between their
> neighboring values.
> 
> I want the arrays to be printed with surrounding double quotes and I'm
> having problems doing it. Since expert bash people are the sneakiest people
> in the world, I thought I'd try you guys. :-)
> 
> Here's my print function which does not wrap the printed values in double
> quotes:
> 
> print_array()
> {
>     typeset aname=$1
>     typeset -i size=0
>     typeset -a vals
> 
>     eval "size=\${#$aname[@]}"
>     eval "vals=(\"\${$aname[@]}\")"
>     echo "print_array:$aname:$size:${vals[@]}"
> }
> 
> aa=(aaa bbb ccc ddd)
> print_array aa
> result is:
> print_array:aa:4:aaa bbb ccc ddd
> 
> I want the output to say
> print_array:aa:4:"aaa" "bbb" "ccc" "ddd"

You've already done the hard part: getting the values from the array
name passed as an argument into `vals'.  For the rest, you can let
printf do the work for you.  Eric suggested %q, and that works to a
certain degree, but you can also use

printf '"%s" ' "${vals[@]}" ; echo

and get the double-quoting you want.

For straight debugging output, it's probably ok.  You might have to
play with it a little if you want to make it into something you can
eval from a command substitution to copy an array.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    c...@case.edu    http://cnswww.cns.cwru.edu/~chet/

Reply via email to