Esta es una regla de "como si".
En pocas palabras: el comportamiento del shell tal como lo ven los usuarios no debería cambiar si una implementación decide hacer que un comando externo estándar también esté disponible como shell incorporado.
El contraste que mostré en /unix//a/496291/5132 entre los comportamientos de (por un lado) los proyectiles PD Korn, MirBSD Korn y Heirloom Bourne; (por otro lado) los proyectiles Z, 93 Korn, Bourne Again y Debian Almquist; y (en la mano de agarre) el caparazón Watanabe resalta esto.
Para los shells que no tienen printfincorporado, la eliminación /usr/binde PATHhace una invocación de printfdejar de funcionar. El comportamiento conforme POSIX, exhibido por el shell Watanabe en su modo conforme, causa el mismo resultado. El comportamiento del shell que tiene printfincorporado es como si estuviera invocando un comando externo.
Mientras que el comportamiento de todos los shells no conformes no altera si /usr/binse elimina PATH, y no se comportan como si estuvieran invocando un comando externo.
Lo que el estándar intenta garantizarle es que los shells pueden incorporar todo tipo de comandos normalmente externos (o implementarlos como sus propias funciones de shell), y aún obtendrá el mismo comportamiento de los incorporados que lo hizo. con los comandos externos si se ajusta PATHpara evitar que se encuentren los comandos. PATHsigue siendo su herramienta para seleccionar y controlar qué comandos puede invocar.
(Como se explicó en /unix//a/448799/5132 , hace años la gente eligió la personalidad de su Unix cambiando lo que estaba funcionando PATH).
Uno podría decir que hacer que el comando siempre funcione independientemente de si se puede encontrar PATH es, de hecho, el punto de hacer que los comandos normalmente externos estén integrados. (Es por eso que mi conjunto de herramientas nosh acaba de obtener un printenvcomando incorporado en la versión 1.38, de hecho. Aunque esto no es un shell).
Pero el estándar le brinda la garantía de que verá el mismo comportamiento para los comandos externos regulares que no están activados PATHdesde el shell, como lo verá en otros programas que no son del shell que invocan la execvpe()función, y el shell no podrá mágicamente ejecutar (aparentemente) comandos externos ordinarios que otros programas no pueden encontrar con el mismo PATH. Todo funciona de forma coherente desde la perspectiva del usuario, y PATHes la herramienta para controlar cómo funciona.
Otras lecturas