Оболонка Watanabe має три види вбудованих деталей, детально описані в її посібнику. Всі вбудовані команди також перераховані, але один повинен зробити висновок про те , що що - то є «регулярним» вбудованої командою з відсутності будь - яких записки , що команда «спеціальна» чи «пів-спеціальна» вбудований. Регулярні вбудовані файли не позначені.
printf
є одним з таких "регулярних" вбудованих. У рідному режимі його завжди викликають, незалежно від того, чи існує зовнішня команда, знайдена цим іменем.
$ PATH = / usr / bin
$ printf
printf: для цієї команди потрібен операнд
$ type printf
printf: звичайний вбудований в / usr / bin / printf
$
$ PATH = /
$ printf
printf: для цієї команди потрібен операнд
$ type printf
printf: звичайний вбудований (не знайдено в $ PATH)
$
Але коли встановлено posixly-correct
параметр оболонки, це лише вбудована, якщо зовнішня команда може бути знайдена на PATH
.
$ set - правильний вираз
$
$ PATH = / usr / bin
$ printf
printf: для цієї команди потрібен операнд
$
$ PATH = /
$ printf
yash: немає такої команди `printf '
$
Це насправді відповідає тому, що говорить Єдина специфікація Unix, і говориться щонайменше з 1997 року.
Він відрізняється від оболонки Z, оболонки 93 Korn, оболонки Bourne Again і оболонки Debian Almquist, жодна з яких не реалізує та не документує таку поведінку для звичайних вбудованих модулів. Наприклад, оболонка Z, наприклад, документи, які регулярно вбудовуються, завжди знайдеться перед кроком, який шукає PATH
. Так само і оболонка Almquist Debian. І саме це роблять ці оболонки, навіть якщо вони викликаються як sh
у своїх параметрах включення-POSIX.
% / bin / exec -a sh zsh -c "PATH = /; введіть printf; printf"
printf - вбудована оболонка
zsh: printf: 1: недостатньо аргументів
% / bin / exec -a sh ksh93 -c "PATH = /; введіть printf; printf"
printf - вбудована оболонка
Використання: printf [параметри] формату [рядок ...]
% / bin / exec -a sh bash --posix -c "PATH = / type printf; printf"
printf - вбудована оболонка
printf: використання: printf [-v var] формат [аргументи]
% / bin / exec -a sh dash -c "PATH = /; введіть printf; printf"
printf - вбудована оболонка
sh: 1: printf: використання: printf формат [арг ...]
%
Однак не запускається, printf
коли він не PATH
знаходиться на поведінці оболонки PD Korn, оболонки Heirloom Bourne та оболонки MirBSD Korn; тому що вони не мають printf
вбудованого в першу чергу. ☺
% / bin / exec -a sh `команда -v ksh` -c" PATH = /; введіть printf; printf "
printf не знайдено
sh: printf: не знайдено
% / bin / exec -a sh `команда -v oksh` -c" PATH = /; введіть printf; printf "
printf не знайдено
sh: printf: не знайдено
% / bin / exec -a sh `команда -v jsh` -c" PATH = /; введіть printf; printf "
printf не знайдено
sh: printf: не знайдено
% / bin / exec -a sh mksh -c "PATH = /; введіть printf; printf"
printf не знайдено
sh: printf: не знайдено
% ksh -c "тип printf; printf"
printf - це відстежений псевдонім для / usr / bin / printf
використання: формат printf [аргументи ...]
% oksh -c "тип printf; printf"
printf - це відстежений псевдонім для / usr / bin / printf
використання: формат printf [аргументи ...]
% jsh -c "тип printf; printf"
printf хешировано (/ usr / bin / printf)
використання: формат printf [аргументи ...]
% mksh -c "тип printf; printf"
printf - це відстежений псевдонім для / usr / bin / printf
використання: формат printf [аргументи ...]
$
PATH
для того, щоб регулярно вбудовуватися підлягає виконанню - тоді, будь ласка, поставте своє запитання щодо цього.