Непонятное поведение звездочки в команде ls

Непонятное поведение звездочки в команде ls

Я пробовал это на Centos и Debian.

Означает ли * в команде ls рекурсивный поиск?

Если я начну вводить имя каталога и нажму Tab, то увижу следующее:

# ls /etc/rc<tab>
rc0.d/    rc1.d/    rc2.d/    rc3.d/    rc4.d/    rc5.d/    rc6.d/    rc.local  rcS.d/

Я думал, что если поставлю звездочку в пути, то увижу то же самое, но вместо этого был выполнен рекурсивный поиск:

# ls /etc/rc*
/etc/rc.local

/etc/rc0.d:
K50netconsole  K90network

/etc/rc1.d:
K50netconsole  K90network

/etc/rc2.d:
K50netconsole  S10network

/etc/rc3.d:
K50netconsole  S10network
...

Команда dir в Windows просто покажет мне каталоги, соответствующие /etc/rc*. Как мне добиться такого же поведения от ls (без использования клавиши Tab)?

****Редактировать/Обновить:

Хорошо, теперь я понимаю, что * интерпретируется bash вместо команды, но всегда ли это интерпретируется как «перечисление записей файлов и папок» или если я использую его в другом контексте, он делает что-то еще, и если да, есть ли в bash какой-то большой оператор if, который говорит «если * используется с путями файловой системы, возвращает имена файлов и папок, если * используется с rpm (например,rpm -qa пост*) возвращать имена пакетов и т.д."

решение1

Asterisk расширяется до того, как доберется до lsкоманды, поэтому это эквивалентно

ls /etc/rc0.d    /etc/rc1.d   /etc/rc2.d    /etc/rc3.d    /etc/rc4.d ...

который выведет список содержимого каждого каталога по отдельности.

Возможно, вы захотите использовать команду , ls -d /etc/rc*чтобы отключить вывод списка файлов внутри каталогов, или использовать команду, которая просто отображает расширение, например echo /etc/rc*.

решение2

По умолчанию, если вы вызываете lsс аргументом каталога, он отображает содержимое каталога. Вы можете изменить это поведение с помощью -dпараметра. Изman ls

-d, --directory
       list  directory entries instead of contents, and do not derefer‐
       ence symbolic links

Связанный контент