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
signature.asc
Description: This is a digitally signed message part.