La carcasa de Watanabe tiene tres tipos de elementos integrados, que se describen en detalle en su manual. Todos los comandos integrados también se enumeran allí, pero uno tiene que inferir que algo es un comando incorporado "normal" por la ausencia de una nota que diga que el comando es un "especial" o un "semi-especial" incorporado. Las incorporaciones regulares no están marcadas.
printf
es uno de esos "regulares" integrados. En modo nativo, siempre se invoca, independientemente de si se encuentra un comando externo con ese nombre.
$ PATH = / usr / bin
$ printf
printf: este comando requiere un operando
$ tipo printf
printf: un incorporado regular en / usr / bin / printf
PS
$ RUTA = /
$ printf
printf: este comando requiere un operando
$ tipo printf
printf: un incorporado normal (no se encuentra en $ PATH)
PS
Pero cuando la posixly-correct
opción de shell está configurada, solo está integrada si el comando externo se puede encontrar en el PATH
.
$ set --posixly-correct
PS
$ PATH = / usr / bin
$ printf
printf: este comando requiere un operando
PS
$ RUTA = /
$ printf
yash: no existe ese comando `printf '
PS
Esto es realmente conforme a lo que dice la Especificación Single Unix, y lo ha dicho al menos desde 1997.
Difiere del shell Z, el shell 93 Korn, el shell Bourne Again y el shell Debian Almquist, ninguno de los cuales implementa o documenta tal comportamiento para las incorporaciones regulares. El shell Z, por ejemplo, documenta que siempre se encuentran elementos integrados regulares , antes del paso que busca PATH
. También lo hace el shell Debian Almquist. Y eso es lo que hacen todos estos shells, incluso si se invocan como sh
con sus opciones de encendido POSIX.
% / bin / exec -a sh zsh -c "RUTA = /; tipo printf; printf"
printf es un shell incorporado
zsh: printf: 1: no hay suficientes argumentos
% / bin / exec -a sh ksh93 -c "RUTA = /; tipo printf; printf"
printf es un shell incorporado
Uso: formato printf [opciones] [cadena ...]
% / bin / exec -a sh bash --posix -c "RUTA = / tipo printf; printf"
printf es un shell incorporado
printf: uso: printf [-v var] formato [argumentos]
% / bin / exec -a sh dash -c "RUTA = /; tipo printf; printf"
printf es un shell incorporado
sh: 1: printf: uso: formato printf [arg ...]
%
Sin embargo, no se ejecuta printf
cuando no está PATH
activado el comportamiento del shell PD Korn, el shell Heirloom Bourne y el shell MirBSD Korn; porque no tienen un printf
incorporado en primer lugar. ☺
% / bin / exec -a sh `comando -v ksh` -c" RUTA = /; escriba printf; printf "
printf no encontrado
sh: printf: no encontrado
% / bin / exec -a sh `comando -v oksh` -c" RUTA = /; escriba printf; printf "
printf no encontrado
sh: printf: no encontrado
% / bin / exec -a sh `comando -v jsh` -c" RUTA = /; escriba printf; printf "
printf no encontrado
sh: printf: no encontrado
% / bin / exec -a sh mksh -c "RUTA = /; tipo printf; printf"
printf no encontrado
sh: printf: no encontrado
% ksh -c "tipo printf; printf"
printf es un alias rastreado para / usr / bin / printf
uso: formato printf [argumentos ...]
% oksh -c "tipo printf; printf"
printf es un alias rastreado para / usr / bin / printf
uso: formato printf [argumentos ...]
% jsh -c "tipo printf; printf"
printf es hash (/ usr / bin / printf)
uso: formato printf [argumentos ...]
% mksh -c "tipo printf; printf"
printf es un alias rastreado para / usr / bin / printf
uso: formato printf [argumentos ...]
PS
PATH
el fin de regular de una función de para ser ejecutado, entonces haga su pregunta al respecto.