Нет. Хотя доступ к встроенным функциям можно получить через то же пространство имен, что и к функциям, они по-прежнему являются отдельными объектами и могут быть доступны, даже если они затенены функцией, с помощью builtin
встроенной команды (для дополнительного удовольствия, вы можете конечно переопределить builtin
☺ ). Заметьте также, что если вы unset -f echo
у вас будет встроенная функция обратно.
Встроенные функции также, как следует из названия, встроены и реализованы (в случае bash )в коде C, сгенерированном из таких файлов, как echo.def .
Одно отличие заключается в эффективности и, следовательно, в скорости. Например, вы можете получить байты один за другим и скопировать их на устройство с помощьюcat
:
cat archlinux.iso > /dev/sdx
Теоретически cat будет перемещать каждый байт независимо. Это медленный процесс, хотя на практике будут задействованы буферы.
С dd
и хорошим размером блока (, обычно связанным с физическим размером блока ), это будет быстрее.
С cp
это зависит от размера буфера, используемогоcp
(неподконтрольным вам )и другими буферами на пути. Теоретически эффективность находится между cat
и dd
.
Аналогия :это как переливать содержимое стакана в другой стакан.
cat
будет делать это по одной капле за раз.
dd
будет использоваться ложка, размер ложки определяется вами (применяются системные ограничения)
cp
будет использовать свою собственную ложку, и вы не знаете, насколько она велика.
Я использую его в основном из-за status=progress
, о котором вы упомянули; что я могу сказать, я нетерпелив и должен знать:-)
Даже если вы забыли добавить это и запустили задание, вы можете отправить ему сигнал SIGUSR1, и он напечатает текущую статистику ввода-вывода в stderr (, который, если вы его не перенаправили, является вашим терминалом ).