Powłoka Watanabe ma trzy rodzaje wbudowanych elementów, szczegółowo opisanych w instrukcji. Wszystkie wbudowane polecenia są tam również wymienione, ale należy wnioskować, że coś jest „zwykłym” wbudowanym poleceniem na podstawie braku jakiejkolwiek uwagi mówiącej, że polecenie jest „specjalne” lub „pół-specjalne” wbudowany Zwykłe wbudowane elementy są nieoznaczone.
printf
jest jednym z takich „zwykłych” wbudowanych. W trybie natywnym jest zawsze wywoływane, niezależnie od tego, czy istnieje taka komenda zewnętrzna.
$ PATH = / usr / bin
$ printf
printf: to polecenie wymaga operandutyp
$ printf
printf: zwykłe wbudowane w / usr / bin / printf
$
$ PATH = /
$ printf
printf: to polecenie wymaga operandutyp
$ printf
printf: zwykłe wbudowane (nie znaleziono w $ PATH)
$
Ale gdy posixly-correct
ustawiona jest opcja powłoki, jest ona wbudowana tylko wtedy, gdy zewnętrzne polecenie można znaleźć w PATH
.
$ set --poprawnie poprawne
$
$ PATH = / usr / bin
$ printf
printf: to polecenie wymaga operandu
$
$ PATH = /
$ printf
yash: nie ma takiego polecenia `printf '
$
Jest to faktycznie zgodne z tym, co mówi specyfikacja Single Unix i co najmniej od 1997 roku.
Różni się od powłoki Z, powłoki 93 Korn, powłoki Bourne Again i powłoki Debian Almquist, z których żadna z nich nie implementuje ani nie dokumentuje takiego zachowania w przypadku zwykłych wbudowań. Na przykład powłoka Z zawiera dokumenty, w których zawsze znajdują się zwykłe wbudowane elementy , przed przeszukiwanym krokiem PATH
. Podobnie jest z powłoką Debian Almquist. I to właśnie robią wszystkie te powłoki, nawet jeśli są wywoływane tak, jak w sh
przypadku ich opcji włączania POSIX.
% / bin / exec -a sh zsh -c "ŚCIEŻKA = /; wpisz printf; printf"
printf jest wbudowaną powłoką
zsh: printf: 1: za mało argumentów
% / bin / exec -a sh ksh93 -c "ŚCIEŻKA = /; wpisz printf; printf"
printf jest wbudowaną powłoką
Zastosowanie: printf [opcje] format [ciąg ...]
% / bin / exec -a sh bash --posix -c "ŚCIEŻKA = / type printf; printf"
printf jest wbudowaną powłoką
printf: użycie: printf [-v var] format [argumenty]
% / bin / exec -a sh dash -c "ŚCIEŻKA = /; wpisz printf; printf"
printf jest wbudowaną powłoką
sh: 1: printf: wykorzystanie: format printf [arg ...]
%
Jednak nie działa, printf
gdy nie jest włączony, PATH
jest zachowanie powłoki PD Korn, powłoki Heirloom Bourne i powłoki MirBSD Korn; ponieważ printf
przede wszystkim nie mają wbudowanego. ☺
% / bin / exec -a sh `polecenie -v ksh` -c" ŚCIEŻKA = /; wpisz printf; printf "
nie znaleziono printf
sh: printf: nie znaleziono
% / bin / exec -a sh `polecenie -v oksh` -c" ŚCIEŻKA = /; wpisz printf; printf "
nie znaleziono printf
sh: printf: nie znaleziono
% / bin / exec -a sh `polecenie -v jsh` -c" ŚCIEŻKA = /; wpisz printf; printf "
nie znaleziono printf
sh: printf: nie znaleziono
% / bin / exec -a sh mksh -c "ŚCIEŻKA = /; wpisz printf; printf"
nie znaleziono printf
sh: printf: nie znaleziono
% ksh -c "typ printf; printf"
printf to śledzony alias dla / usr / bin / printf
użycie: format printf [argumenty ...]
% oksh -c "typ printf; printf"
printf to śledzony alias dla / usr / bin / printf
użycie: format printf [argumenty ...]
% jsh -c "typ printf; printf"
printf jest hashed (/ usr / bin / printf)
użycie: format printf [argumenty ...]
% mksh -c "typ printf; printf"
printf to śledzony alias dla / usr / bin / printf
użycie: format printf [argumenty ...]
$
PATH
w celu regularnego wbudowanego do wykonania - zadaj pytanie na ten temat.