echo() {
command echo -n "$@"
}
Usar command
aqui significa pedir o comando echo
(que por acaso é construído aqui) em vez da função que, de outra forma, teria precedência.
E, como aqui, echo
também é construído (não é consultado em $PATH
BTW, pois os recursos internos têm precedência sobre os comandos do sistema de arquivos), você também pode fazer:
echo() {
builtin echo -n "$@"
}
Essa última abordagem é preferível em zsh
, em que command echo
executaria /bin/echo
(exceto em sh
emulação).
Existem algumas variações sutis entre os shells, mas a ordem de precedência é geralmente:
- especiais incorporados
- funções
- builtins
- comandos em
$PATH
(e a ordem depende da ordem em$PATH
e na tabelahash
conforme gerenciada pelohash
builtin)
Tendo em mente que alias e palavras-chave na sintaxe do shell ( for
, if
...), quando não citados, são considerados antes desses.
A ordem de 1
e 2
é revertida em alguns shells como bash
ou zsh
. bash
não permite que funções sejam definidas com o mesmo nome de um especial embutido quando chamado como sh
.