The mental model of bash is "this text expands to this text like so, which means x haappens." The model I want is "I'm gonna do x to each of these files."
As for the 23 commands, my attitude is that this is usually either ~19 too many, or infinitely too few.
I acknowledge that maybe the way of doing things will start to make sense at some point, but it hasn't happened yet, and I find trying to climb the hill of understanding the shell to be a joyless experience.
As recently seen on HN: http://www.cs.yale.edu/homes/perlis-alan/quotes.html
11. If you have a procedure with ten parameters, you probably missed some.
Globbing preserves whitespace. It's up to the target function to discard it, by forgetting to quote arguments.
example1() {
[ $# -eq 0 ] && return
echo "$1"
shift
example1 "$@"
}
example2() {
for arg in "$@"; do
echo "$arg"
done
}
touch 1 "2 3" 4
example1 *
example2 *
# both examples print:
# 1
# 2 3
# 4