command foo запустит команду foo даже если определена функция оболочки foo . Это поведение требуется POSIX .
Это позволяет вам вызывать команду foo внутри функции foo . Без command foo функция (при вызове) будет вызывать сама себя и создавать циклическую ссылку.
Ну, иногда вы можете вызвать исполняемый файл foo по его полному пути, чтобы подавить поиск функции оболочки (громоздкий и непереносимый, но все же это своего рода обходной путь), но в некоторых случаях это невозможно. Например, в этом моем ответе (ближе к концу) я переопределяю cd и command cd обязательна, потому что даже если есть исполняемый файл cd полный путь которого я могу использовать, он не изменит каталог. Использование command - верный способ справиться с этим.
Также обратите внимание, что command foo не будет вызывать псевдоним foo (если есть). Вы использовали ls в качестве примера. По крайней мере , несколько общих дистрибутивы Linux псевдонима ls ls --color=auto по умолчанию. В этом случае ls и command ls могут давать разные результаты (т.е. цветные или нет). POSIX (или любое другое) определение command не должно упоминать псевдонимы, потому что bar foo в первую очередь не вызывает псевдоним foo (если есть) (с несколькими исключениями, касающимися bar , но command не является одним из них).
Используете ли вы command foo в сеансе интерактивной оболочки или в сценарии оболочки, может иметь значение для foo , но не для встроенной command .