I much prefer ksh myself, in particular for scripting. Fun fact about how bash is broken:
export a=0
cat $file | while read line
do
a=$(expr $a + 1)
done
Bash will fork the while loop as a separate process, inheriting (copying) its own environment, and the variable will only update locally, not in the parent process.