O Bash não verifica o número de argumentos passados para uma função porque não há protótipos como em C. De link :
Shell functions are a way to group commands for later execution using a single name for the group. They are executed just like a "regular" command. When the name of a shell function is used as a simple command name, the list of commands associated with that function name is executed. Shell functions are executed in the current shell context; no new process is created to interpret them.
Functions are declared using this syntax:
name () compound-command [ redirections ]
or
function name [()] compound-command [ redirections ]
Uma verificação interna funciona se um número de argumentos está correto e retorna um erro se não estiver, mas não é responsabilidade do Bash. Veja:
#!/bin/bash
function f()
{
echo $1
}
function f1
{
echo $1
}
f
f 2
f1
f1 f1