if
не имеет параметров теста; команда test
(также пишется [
) делает. if
и case
делают две разные вещи. case
сравнивает одно значение с количеством шаблонов, чтобы увидеть, какие из них соответствуют. if
и elif
проверяет состояние выхода команды . Просто так получается, что test
/ [
- это самая командная команда, используемая с оператором if
.
Каждый тест, такой как -e
, -d
и т. Д., Соответствует вызову системного вызова с именем stat
, который возвращает гораздо больше информации, чем любой отдельный тест; эта информация просто отбрасывается. Вы можете вручную запустить оболочку внешней программы вокруг stat
(также называемой stat
), а затем сопоставить шаблон на своем выходе с помощью оператора case
. Это немного менее эффективно, поскольку включает в себя запуск внешней программы только для доступа к системному вызову. Тем не менее, дистрибутив bash
поставляется со встроенным stat
, который вы можете скомпилировать и позволить себе решить эту проблему.
(В журнале изменений для bash
5 упоминается новая загружаемая встроенная функция для stat
& mdash; среди других команд & mdash ;, но она, похоже, ничем не отличается от той, которую я хотя и был доступен некоторое время.)