> I have a dozen of functions in my bashrc that are basically a bit more sophisticated aliases.
Me too. Looking at them, they all start with something like
test $# -eq 2 || return
...since in sh/bash you cannot even name your function's arguments or indicate how many you expect to receive.
Speaking of primitiveness, in strict POSIX sh, there's no such thing as local variables in functions!!