В первом случае вы даете ls каталог и просите показать его содержимое.
Во втором случае вы уже предоставляете ls содержимое напрямую (список отдельных файлов и подкаталогов) и просите показать именно эти элементы, но не их дальнейшее содержимое.
Таким образом, они дают тот же результат, потому что они делают почти то же самое, за исключением того, что в первом случае ls сам определяет, какое содержимое нужно показать, а во втором случае вы даете ему заранее определенный список.
У Ls есть два режима: когда передается файл, он показывает только этот файл; когда дан каталог, он показывает содержимое этого каталога (один уровень глубиной).
Ваш /example
является каталогом, поэтому, когда вы используете ls /example
, Ls покажет его содержимое. -d
Опция отключает это поведение и делает Ls всегда показывают только деталь учитывая, является ли это файл или нет.
(Сравнить: ls -l /etc
а ls -l -d /etc
)
Но когда вы используете ls -d /example/*
, вы не просите его показать каталог - вы даете ему список отдельных элементов для показа. Подстановочные знаки расширяются вашей оболочкой до запуска команды, так что на самом деле вы работаете ls -d /example/file1 /example/file2 /example/file3
.