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/