O que você está perguntando não faz muito sentido.
palavra-chave significa que é uma palavra que faz parte da sintaxe do shell. Aqueles são reconhecidos através de tokenising. Citá-los é o suficiente para o shell parar de reconhecer.
É possível alias uma palavra-chave na maioria dos shells. Portanto, os aliases têm precedência sobre as palavras-chave (na verdade, elas são expandidas antecipadamente e há mais tokenising depois disso, onde você pode ter mais aliases, palavras-chave) ...
aliases (com a exceção de aliases zsh definidos com alias -g
são apenas expandidos na posição de comando), então normalmente não em builtin the-alias
.
funções têm precedência sobre builtins e builtins sobre comandos externos (e então $PATH
decide qual usar).
Você pode forçar o builtin com:
builtin the-cmd and its args
(embora deva ser notado, não é um comando padrão).
Você pode desabilitar os aliases citando-os (embora a versão citada também possa ser aliada em alguns shells).
Então, por exemplo (aqui sintaxe zsh), em:
'while'() echo function while
alias 'while=echo alias while'
A gravação de while true
produziria realmente alias while true
e não haveria como usar a palavra-chave while
, já que citá-la desativaria o alias e a palavra-chave.
Você chamaria a função while
com, por exemplo:
'whi'le whatever
Se houvesse um while
embutido (mas é claro que não funcionariam naqueles shells que tivessem while
palavra-chave), você o escreveria:
builtin while whatever
E para chamar o comando while
, você escreveria:
env while whatever
ou em zsh
(quando não em sh
emulação):
command while whatever
(em outros shells, command
apenas previne funções, não builtins)
Ou
/full/path/to/while whatever
Claro, nada o impede de fazer coisas ainda mais idiotas como:
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
Qual, pelo menos em zsh, é válido (mas estúpido).