Os comandos internos são sempre preferidos aos comandos externos. A lógica é que o comando interno é mais rápido (e, em alguns casos, como cdou , apenas o comando interno pode ter o efeito desejado).test -o BASH_OPTION
Às vezes, o comando externo pode ter recursos que o shell interno não possui. Nesse caso, você pode chamar o comando externo, fornecendo um caminho explícito (ou seja, contendo uma barra) (isso ignora qualquer preocupação com a ordem em $PATH). Se você não deseja codificar o caminho externo, mas deseja impedir o uso do built-in, use "$(type -P test)"(note capital P) no bash, "$(whence -p test)"no ksh e =testno zsh. Outra maneira de forçar o uso de um comando externo é usar o commandbuiltin ( command -p test …) ou passar pelo envutilitário ( env test …).
No zsh, você pode desativar um builtin com disable test. Isso é permanente (para o shell ou subshell atual) até que o builtin seja reativado enable test. No bash, você pode fazer o mesmo com enable -n testpara desativar e enable testreativar.
Você pode usar um alias ou função para forçar a execução de um comando diferente, por exemplo alias test=/usr/bin/testou test () { /usr/bin/test "$@"; }. Se você tiver esse apelido, poderá impedir seu uso citando qualquer parte dele, por exemplo \test, executará a função normal / pesquisa interna / externa. Observe que, dependendo do shell e de suas configurações, as definições de alias em uma função podem ser expandidas quando uma função é lida ou quando é executada. Se você definiu uma função, pode command testevitar a pesquisa de funções, bem como a pesquisa de alias (portanto, aqui o testbuiltin será chamado, a menos que seja desativado).
/usr/bin/test -f "$file"...