Встроенные команды всегда предпочтительнее внешних команд. Смысл в том, что встроенная команда работает быстрее (и в некоторых случаях, например, cdили , только встроенная команда может дать желаемый эффект).test -o BASH_OPTION
Иногда внешняя команда может иметь возможности, которых нет у встроенной оболочки. В этом случае вы можете вызвать внешнюю команду, указав явный путь (то есть, содержащий косую черту) (это обходит любые опасения по поводу порядка в $PATH). Если вы не хотите жестко кодировать внешний путь, но хотите запретить использование встроенной функции, вы можете использовать "$(type -P test)"(примечание заглавную P) в bash, "$(whence -p test)"в ksh и =testв zsh. Другой способ принудительного использования внешней команды - использовать commandвстроенный ( command -p test …) или пройти через envутилиту ( env test …).
В zsh вы можете отключить встроенную функцию с помощью disable test. Это постоянно (для текущей оболочки или подоболочки), пока встроенная функция не будет включена enable test. В bash вы можете сделать то же самое с enable -n testотключением и enable testвключением.
Вы можете использовать псевдоним или функцию для принудительного выполнения другой команды, например alias test=/usr/bin/testили test () { /usr/bin/test "$@"; }. Если у вас есть такой псевдоним, вы можете запретить его использование, заключив в кавычки любую его часть, например, \testбудет выполнять обычную функцию / встроенный / внешний поиск. Обратите внимание, что в зависимости от оболочки и ее настроек определения псевдонимов в функции могут быть расширены при чтении функции или при ее выполнении. Если вы определили функцию, вы можете использовать ее command testдля предотвращения поиска функций, а также поиска псевдонимов (поэтому здесь testвстроенная функция будет вызываться, если она не отключена).
/usr/bin/test -f "$file"...