On Tue, Nov 27, 2012 at 07:57:28PM +0100, Tim Friske wrote: > I came accross the `-v` option of the `test` command and wondered how I > would possibly test not only string- and integer- but also array variables > as a whole and in parts.
Sounds more like a help-bash question than a bug-bash question. For a single element, I'd drop the test -v entirely and just use the standard methods: if [[ ${array[i]+set} ]]; then echo "array element i is set"; fi (See http://mywiki.wooledge.org/BashFAQ/083). For whole arrays, it's murkier, because arrays and strings can be transformed into each other at will. Referencing element 0 of an array is the same thing as referencing a scalar by the same name: $ unset array; array=(zero one two); echo "$array" zero $ unset string; string="foo"; echo "${string[0]}" foo However, bash actually does seem to track whether a variable was initialized as a single-element array, or as a string: $ unset a; a=(x); declare -p a declare -a a='([0]="x")' $ unset b; b=x; declare -p b declare -- b="x" So, if you care about that particular distinction, you could find some bash-specific test (possibly "declare -p", or possibly something else) to distinguish them. Otherwise, they are exactly the same: $ echo "<$a> <$b> <${a[0]}> <${b[0]}> ${#a[*]} ${#b[*]}" <x> <x> <x> <x> 1 1