Bash treats the variable as essentially undefined until given at least an 
empty value.

    $ bash -c 'typeset -i x; [[ -v x ]]; echo "$?, ${x+foo}"; typeset -p x'
    1,
    bash: line 0: typeset: x: not found
    $ ksh -c 'typeset -i x; [[ -v x ]]; echo "$?, ${x+foo}"; typeset -p x'
    0,
    typeset -i x

Zsh implicitly gives integers a zero value if none are specified and the
variable was previously undefined. Either the ksh or zsh ways are fine IMO.

Also I'll throw this in:

    $ arr[1]=test; [[ -v arr[1] ]]; echo $?
    1

This now works in ksh to test if an individual element is set, though it 
hasn't always. Maybe Bash should do the same? -v is tricky because it adds 
some extra nuances to what it means for something to be defined...

-- 
Dan Douglas

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to