Esta é uma regra "como se".
Simplificando: o comportamento do shell, como os usuários o vêem, não deve mudar se uma implementação decidir disponibilizar um comando externo padrão também como embutido no shell.
O contraste que mostrei em /unix//a/496291/5132 entre os comportamentos (por um lado) dos projéteis PD Korn, MirBSD Korn e Heirloom Bourne; (por outro lado) as conchas Z, 93 Korn, Bourne Again e Debian Almquist; e (na mão emocionante) a concha Watanabe destaca isso.
Para os shells que não têm printfcomo interno, a remoção /usr/binde PATHfaz uma invocação de printfparar de funcionar. O comportamento de conformidade POSIX, exibido pelo shell Watanabe em seu modo de conformidade, causa o mesmo resultado. O comportamento do shell que possui um printfbuilt-in é como se estivesse invocando um comando externo.
Enquanto o comportamento de todos os shells não-conformes não se altera se /usr/binfor removido PATHe eles não se comportam como se estivessem invocando um comando externo.
O que o padrão está tentando garantir a você é que os shells podem incorporar todos os tipos de comandos normalmente externos (ou implementá-los como suas próprias funções de shell), e você ainda terá o mesmo comportamento dos incorporados que fez. com os comandos externos se você ajustar PATHpara impedir que os comandos sejam encontrados. PATHcontinua sendo sua ferramenta para selecionar e controlar quais comandos você pode chamar.
(Como explicado em /unix//a/448799/5132 , anos atrás, as pessoas escolheram a personalidade de seu Unix alterando o que estava acontecendo PATH.)
Pode-se opinar que fazer o comando sempre funcionar, independentemente de poder ser encontrado, PATH é de fato o objetivo de criar comandos normalmente externos internos. (É por isso que meu conjunto de ferramentas nosh ganhou um printenvcomando interno na versão 1.38, de fato. Embora este não seja um shell.)
Mas o padrão está lhe dando a garantia de que você verá o mesmo comportamento para comandos externos regulares que não estão no PATHshell, como verá em outros programas não-shell que invocam a execvpe()função, e o shell não será capaz de magicamente execute (aparentemente) comandos externos comuns que outros programas não podem encontrar com o mesmo PATH. Tudo funciona de forma autônoma da perspectiva do usuário e PATHé a ferramenta para controlar como funciona.
Leitura adicional