Am 11.01.2013 19:27, schrieb Dan Douglas: > 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... >
Personally I like the current behavior, disclaimer I use nounset. I see no problem with getting people to initialize variables. it is a more robust programming approach.