Você pode usar "$@"
para passar todos os argumentos da função como estão para o comando real:
$ verbose_ls() { echo "running ls with args '$@'"; \ls "$@"; }
$ alias ls=verbose_ls
$ ls -l -a /
running ls with args '-l -a /'
...
Observe o backslash \
antes do ls
na função. Isso impedirá que bash
expandisse o ls
alias, já que você deseja chamar o /bin/ls
, não o alias definido recursivamente.
Se você realmente quiser acessar um determinado argumento na função enquanto ainda mantém a opção de passar arbitrariamente a opção muda para o comando real, você provavelmente não pode evitar a implementação de algum tipo de lógica de análise de argumentos na própria função.