Die Watanabe-Shell verfügt über drei Arten von integrierten Funktionen, die ausführlich in ihrem Handbuch beschrieben werden. Alle der integrierten Befehle auch dort aufgeführt sind, aber man hat , dass etwas eine „reguläre“ integrierten Befehl aus dem schließen Fehlen jeglicher Notiz, dass der Befehl ein „special“ oder ein „semi-special“ eingebaut. Normale Einbauten sind nicht markiert.
printf
ist eine solche "normale" eingebaut. Im einheitlichen Modus wird es immer aufgerufen, unabhängig davon, ob ein externer Befehl mit diesem Namen gefunden wurde.
$ PATH = / usr / bin
$ printf
printf: Dieser Befehl erfordert einen Operanden
$ Typ printf
printf: ein reguläres eingebautes in / usr / bin / printf
$
$ PATH = /
$ printf
printf: Dieser Befehl erfordert einen Operanden
$ Typ printf
printf: ein reguläres eingebautes (nicht in $ PATH gefunden)
$
Wenn die posixly-correct
Shell-Option aktiviert ist, ist sie nur dann integriert, wenn der externe Befehl auf der gefunden werden kann PATH
.
$ set --posixly-correct
$
$ PATH = / usr / bin
$ printf
printf: Dieser Befehl erfordert einen Operanden
$
$ PATH = /
$ printf
yash: kein solcher Befehl `printf '
$
Dies entspricht den Aussagen der Single Unix Specifiation und ist seit mindestens 1997 bekannt.
Es unterscheidet sich von der Z-Shell, der 93-Korn-Shell, der Bourne-Again-Shell und der Debian-Almquist-Shell, von denen keine ein solches Verhalten für reguläre Einbauten implementiert oder dokumentiert. Die Z-Shell zum Beispiel dokumentiert, dass reguläre eingebaute Funktionen immer vor dem Schritt gefunden werden, der durchsucht wird PATH
. Dies gilt auch für die Debian-Almquist-Shell. Und genau das tun diese Shells, auch wenn sie sh
mit ihren POSIX-Einschaltoptionen aufgerufen werden .
% / bin / exec -a sh zsh -c "PFAD = /; Typ printf; printf"
printf ist eine eingebaute Shell
zsh: printf: 1: nicht genug Argumente
% / bin / exec -a sh ksh93 -c "PFAD = /; Typ printf; printf"
printf ist eine eingebaute Shell
Verwendung: printf [options] format [string ...]
% / bin / exec -a sh bash --posix -c "PATH = / type printf; printf"
printf ist eine eingebaute Shell
printf: usage: printf [-v var] format [arguments]
% / bin / exec -a sh Gedankenstrich -c "PATH = /; Typ printf; printf"
printf ist eine eingebaute Shell
sh: 1: printf: usage: printf format [arg ...]
%
Das Verhalten der PD-Korn-Shell, der Heirloom-Bourne-Shell und der MirBSD-Korn-Shell printf
ist jedoch nicht aktiv, wenn sie nicht PATH
aktiviert ist. weil sie gar nicht erst printf
eingebaut haben . ☺
% / bin / exec -a sh `Befehl -v ksh` -c" PATH = /; Typ printf; printf "
printf nicht gefunden
sh: printf: nicht gefunden
% / bin / exec -a sh `Befehl -v oksh` -c" PATH = /; Typ printf; printf "
printf nicht gefunden
sh: printf: nicht gefunden
% / bin / exec -a sh `Befehl -v jsh` -c" PATH = /; Typ printf; printf "
printf nicht gefunden
sh: printf: nicht gefunden
% / bin / exec -a sh mksh -c "PFAD = /; Typ printf; printf"
printf nicht gefunden
sh: printf: nicht gefunden
% ksh -c "Typ printf; printf"
printf ist ein nachverfolgter Alias für / usr / bin / printf
Verwendung: printf Format [Argumente ...]
% oksh -c "Typ printf; printf"
printf ist ein nachverfolgter Alias für / usr / bin / printf
Verwendung: printf Format [Argumente ...]
% jsh -c "Typ printf; printf"
printf ist gehasht (/ usr / bin / printf)
Verwendung: printf Format [Argumente ...]
% mksh -c "Typ printf; printf"
printf ist ein nachverfolgter Alias für / usr / bin / printf
Verwendung: printf Format [Argumente ...]
$
PATH
muss, damit eine reguläre integrierte Funktion verwendet werden kann ausgeführt werden - dann stellen Sie bitte Ihre Frage dazu.